博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Delphi加密字串(异或运算)
阅读量:6085 次
发布时间:2019-06-20

本文共 1954 字,大约阅读时间需要 6 分钟。

首先有两个自定的转换函数:

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');

转载于:https://www.cnblogs.com/xxd0825/archive/2012/12/05/2804022.html

你可能感兴趣的文章
PHP Switch 语句
查看>>
可拖拽悬浮窗、对话框悬浮窗的简单实现
查看>>
各种Camera,总有一款适合你(二)
查看>>
ACID、Data Replication、CAP与BASE
查看>>
每日一句(2014-10-16)
查看>>
交换输出
查看>>
Android wakelock机制
查看>>
hdu3182 状态压缩水题
查看>>
SQL—— 事务
查看>>
Hibernate Annotation 设置字段的默认值
查看>>
你所不知道的SQL Server数据库启动过程,以及启动不起来的各种问题的分析及解决技巧...
查看>>
原已经安装好的nginx,现在需要添加一个未被编译安装的模块--echo-nginx-module-0.56...
查看>>
Android学习之适配器ArrayAdapter SimpleAdapter
查看>>
hdu 1561 The more, The Better (树上背包)
查看>>
SHELL函数处理
查看>>
一口气看完一个项目源码(一)之用户注册
查看>>
DBA_Oracle海量数据处理分析(方法论)
查看>>
看看C# 6.0中那些语法糖都干了些什么(中篇)
查看>>
终端 进程关系
查看>>
ios取证
查看>>