delphi 加密字符串

来源:互联网 发布:什么软件可以看阿衰 编辑:程序博客网 时间:2024/06/05 23:45

1.

function EncrypStr(Src, Key: String): String;//字符串加密函数 
//对字符串加密(Src:源 Key:密匙)
var KeyLen :Integer;
    KeyPos :Integer;
    offset :Integer;
    dest :string;
    SrcPos :Integer;
    SrcAsc :Integer;
    Range :Integer;
begin
   KeyLen:
=Length(Key);
  
if KeyLen = 0 then key:='delphi';
   KeyPos:
=0;
   Range:
=256;
   Randomize;
   offset:
=Random(Range);
   dest:
=format('%1.2x',[offset]);
  
for SrcPos := 1 to Length(Src) do
     
begin
         SrcAsc:
=(Ord(Src[SrcPos]) + 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;
end;

function UncrypStr(Src, Key: String): string;//字符串解密函数 
//对字符串解密(Src:源 Key:密匙)
var KeyLen :Integer;
    KeyPos :Integer;
    offset :Integer;
    dest :string;
    SrcPos :Integer;
    SrcAsc :Integer;
    TmpSrcAsc :Integer;
begin
   KeyLen:
=Length(Key);
  
if KeyLen = 0 then key:='delphi';
   KeyPos:
=0;
   offset:
=StrToInt('$'+ copy(src,1,2));
   SrcPos:
=3;
  
repeat
      SrcAsc:
=StrToInt('$'+ copy(src,SrcPos,2));
     
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;
      dest:
=dest + chr(TmpSrcAsc);
      offset:
=srcAsc;
      SrcPos:
=SrcPos + 2;
  
until SrcPos >= Length(Src);
   Result:
=Dest;
end;

//***************************************************************************************

2.

//********************************************************
//             加密解密 (利用异或运算)    (方式2)          
//********************************************************

function encryptstr(const s:string; skey:string):string;//加密
var
    i,j: integer;
    hexS,hexskey,midS,tmpstr:string;
    a,b,c:byte;
begin
    hexS   :
=myStrtoHex(s);
    hexskey:
=myStrtoHex(skey);
    midS   :
=hexS;
   
for i:=1 to (length(hexskey) div 2)   do
   
begin
       
if i<>1 then midS:= tmpstr;
        tmpstr:
='';
       
for j:=1 to (length(midS) div 2) do
       
begin
            a:
=strtoint('$'+midS[2*j-1]+midS[2*j]);
            b:
=strtoint('$'+hexskey[2*i-1]+hexskey[2*i]);
            c:
=a xor b;
            tmpstr :
= tmpstr+myStrtoHex(chr(c));
       
end;
   
end;
    result :
= tmpstr;
end;

function decryptstr(const s:string; skey:string):string;//解密
var
    i,j: integer;
    hexS,hexskey,midS,tmpstr:string;
    a,b,c:byte;
begin
    hexS  :
=s;//应该是该字符串
   
if length(hexS) mod 2=1 then
   
begin
        showmessage(
'密文错误!');
        exit;
   
end;
    hexskey:
=myStrtoHex(skey);
    tmpstr :
=hexS;
    midS   :
=hexS;
   
for i:=(length(hexskey) div 2) downto 1 do
   
begin
       
if i<>(length(hexskey) div 2) then midS:= tmpstr;
        tmpstr:
='';
       
for j:=1 to (length(midS) div 2) do
       
begin
            a:
=strtoint('$'+midS[2*j-1]+midS[2*j]);
            b:
=strtoint('$'+hexskey[2*i-1]+hexskey[2*i]);
            c:
=a xor b;
            tmpstr :
= tmpstr+myStrtoHex(chr(c));
       
end;
   
end;
    result :
= myHextoStr(tmpstr);
end;



原创粉丝点击