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