• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

DELPHI加密字串(异或运算加密)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
首先有两个自定的转换函数:  
  
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;    
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;    
{两个函数的参数相同,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');   
  
   

  


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Delphi国内优秀网站及开源项目发布时间:2022-07-18
下一篇:
delphihttppost请求后台,获取json数据发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap