zoukankan      html  css  js  c++  java
  • 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');   
      
       
    

      

  • 相关阅读:
    计算机网络知识总结-网络安全
    域名恶意指向的解决方法
    域名恶意解析的原因是什么
    域名被人恶意解析的解决方法
    防止域名被恶意解析
    公安部网防G01-网站安全卫士软件/linux防御
    详解web容器
    关于 服务器ip和域名进行一个绑定
    重新温习软件设计之路(2)
    重新温习软件设计之路(1)
  • 原文地址:https://www.cnblogs.com/qingsong/p/4033027.html
Copyright © 2011-2022 走看看