Delphi 带密匙的字符串加密解密函数(支持中文)


本文整理自网络,侵删。

 
uses AnsiStrings;

Function JiaMi(Src:String; Key:String):String;

var

  KeyLen :Integer;

  KeyPos :Integer;

  offset :Integer;

  dest :String;

  SrcPos :Integer;

  SrcAsc :Integer;

  Range :Integer;

  IntTemp:integer;

  SrcAnsi:PAnsiChar;

begin

  KeyLen:=Length(Key);

  KeyPos:=0;

  Range:=1;

  Randomize;

  offset:=Random(Range);

  dest:=format('%1.2x',[offset]);

  SrcAnsi:=PAnsiChar(AnsiString(Src));

  IntTemp:= Length(SrcAnsi);

  for SrcPos := 1 to IntTemp do

  begin

    SrcAsc:=(Ord(SrcAnsi[SrcPos-1]) + offset) MOD 255;

    if KeyPos < KeyLen then KeyPos:= KeyPos + 1 else KeyPos:=1;

    SrcAsc:= SrcAsc xor Ord(Key[KeyPos]);

    dest:=dest + format('%1.2x',[SrcAsc]);

    offset:=SrcAsc;

  end;

  Result:=Dest;

end;

//解密函数

Function JieMi (Src:String; Key:String):String;

var

  KeyLen :Integer;

  KeyPos :Integer;

  offset :Integer;

  dest :String;

  SrcPos :Integer;

  SrcAsc :Integer;

  TmpSrcAsc :Integer;

  Range :Integer;

  SrcAnsi:PAnsiChar;

  IntTemp,i:Integer;

  ByteArray: array of Byte;

begin

  KeyLen:=Length(Key);

  if KeyLen = 0 then key:='starlin';

  KeyPos:=0;

  SrcPos:=0;

  SrcAsc:=0;

  Range:=1;

  offset:=StrToInt('$'+ copy(src,1,2));

  SrcPos:=3;

  IntTemp:=Length(Src) div 2;

  setlength(ByteArray,IntTemp);

  i:=0;

  repeat

    try

      SrcAsc:=StrToInt('$'+ copy(src,SrcPos,2));

    except

      SrcAsc:=StrToInt('$00');

    end;



    if KeyPos < KeyLen Then KeyPos := KeyPos + 1 else KeyPos := 1;



    TmpSrcAsc := SrcAsc xor Ord(Key[KeyPos]);



    if TmpSrcAsc <= offset then

      TmpSrcAsc := 255 + TmpSrcAsc - offset

    else

      TmpSrcAsc := TmpSrcAsc - offset;

    ByteArray[i]:=TmpSrcAsc;

    i:=i+1;

    offset:=srcAsc;

    SrcPos:=SrcPos + 2;

  until SrcPos >= Length(Src);

  CopyMemory(@SrcAnsi[0],@ByteArray[0],IntTemp);

  dest:=string(AnsiStrings.strpas(SrcAnsi));

  Result:=Dest;



end;


procedure TForm1.Button1Click(Sender: TObject);

begin
showmessage(jiami('www.delphitop.com','123'));
showmessage(jiemi(jiami('www.delphitop.com','123'),'123'));
end;

相关阅读 >>

Delphi web service 多表提交的事务管理

Delphi改变图片的像素,即大小

dll 使用 pchar 参数的小例子

Delphi 提高进程自身权限

Delphi实现身份证号码15到18位升位算法

Delphi dbgrid适应宽度

Delphi 获取access中的表名

Delphi根据进程id获取进程路径

Delphi实现qq右下角弹出信息窗口

Delphi添加任务栏右键菜单

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...