delphi 對字符串進行加密實現

首先有兩個自定的轉換函數:


function myStrToHex(s:string):string; //字串轉16進制   
var  
  TmpStr:string;  
  i:integer;  
begin  
  TmpStr:='';  
  for i:=1 to Length(s)do  
    TmpStr:=TmpStr+IntToHex(ord(s[i]),2);  
  Result:=TmpStr;  
end;  
  
function myHexToStr(S:string):string; //16進制轉字串   
var  
  HexS,TmpStr:string;  
  i:Integer;  
  a:Byte;  
begin  
  HexS:=s;  
  if Length(HexS) mod 2=1 then  
    HexS:=HexS+'0';  
  TmpStr:='';  
  for i:=1 to(Length(HexS)div 2)do  
  begin  
    a:=StrToInt('$'+HexS[2*i-1]+HexS[2*i]);  
    TmpStr:=TmpStr+Chr(a);  
  end;  
  Result:=TmpStr;  
end;  




然後就是加密、解密函數了:


{兩個函數的參數相同,s爲要加密、解密的字串;sKey爲密匙}  
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:=''; //下面要用到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:=''; //下面要用到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;  

現在已經可以使用了,調用EncryptStr和DecryptStr分別加密、解密


 


例:


[delphi] view plaincopyprint?Edit1.Text:=EncryptStr('Hello','delphi');  
  
////////////////////////////////////////   
  
Edit1.Text:=DecryptStr(Edit1.Text,'delphi');  
Edit1.Text:=EncryptStr('Hello','delphi');

////////////////////////////////////////


Edit1.Text:=DecryptStr(Edit1.Text,'delphi'); 


 

發佈了9 篇原創文章 · 獲贊 0 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章