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;  
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'); 
 
 
 
复制代码

 

posted on   癫狂编程  阅读(760)  评论(0编辑  收藏  举报

编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
好的代码像粥一样,都是用时间熬出来的
点击右上角即可分享
微信分享提示