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


    原文地址:http://blog.csdn.net/chinazhd/article/details/7578412  

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

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

  • 相关阅读:
    20220405 08:00:02
    TensorFlow2.0入门到实战——安装
    eclipse复制软件重新拉项目后,使其记住之前设置的tomcat和jdk等配置
    eclipse maven项目启动时,报系统找不到xxx.xml文件(pom文件没编译出来)
    jqgrid 列太多显示不全,添加滚动条
    CSS 超出div宽度范围的文字用..省略号 ,在鼠标移上去以后显示完整的内容
    给自己的博客园标签按字典序排序
    Nodered的基础使用——httpin/http response/http request节点的使用(3)
    navicat premiun16破解版(日期2022.04.28就会失效,抓紧了哦~)
    Nodered的基础使用——cronplus节点的使用(2)
  • 原文地址:https://www.cnblogs.com/zhangzhifeng/p/5583095.html
Copyright © 2020-2023  润新知