我总想加密程序中的一些字符串,弄了几天都弄不懂。这是我在网上找的字符串加密代码。我想请大家给我讲解一下他这是什么意思。特别是这段Byte(Str[i]) xor XorKey[j],2 和'$'+Copy(Str,i*2-1,2)) xor XorKey[j]);这段。看不懂是什么意思。求会的朋友花点时间给我详细解释一下。
const       XorKey:array[0..7] of Byte=($B2,$09,$AA,$55,$93,$6D,$84,$47); //字符串加密用然后在程序里加入以下两个函数,具体用法就不用多说了吧!function Enc(Str:String):String;//字符加密函數   這是用的一個異或加密
var
i,j:Integer;
begin
Result:='';
j:=0;
for i:=1 to Length(Str) do
   begin
     Result:=Result+IntToHex(Byte(Str[i]) xor XorKey[j],2);
     j:=(j+1) mod 8;
   end;
end;function Dec(Str:String):String;//字符解密函數
var
i,j:Integer;
begin
Result:='';
j:=0;
for i:=1 to Length(Str) div 2 do
   begin
     Result:=Result+Char(StrToInt('$'+Copy(Str,i*2-1,2)) xor XorKey[j]);
     j:=(j+1) mod 8;
   end;
end;

解决方案 »

  1.   

    Delphi里的Lizb单元里不是有压缩和解压缩函数嘛。
      

  2.   

    IntToHex(Byte(Str[i]) xor XorKey[j],2)Byte(Str[i]) //char(字符)转为byte(0..255) Byte(Str[i]) xor XorKey[j]  //byte 与byte 异或运算IntToHex(Byte(Str[i]) xor XorKey[j],2) 整数转化为16进制字符串
    下面差不多的过程
      

  3.   

    这个应该算是最简单的加密方式了,利用xor的特性
    A xor 1 = not A
    A xor 0 = A
      

  4.   

    3楼是胡扯,xor不是这么玩滴,3楼可以试试2 xor 1看看等于多少
    楼主还是看2楼的吧
      

  5.   

    网上的加密算法太多了,楼主可以找一下des的相关算法,
    xor加密非常不规范的。偶尔会返回错误的,网上找一下crc也可以!
      

  6.   

    异或的公式为
    A xor B = C;那么C xor B = A,A xor C = B
      

  7.   

    1.首先,楼主要明白 异或计算的原理: 
    一个数字,和另一个数字连续异或两次,会得到本身。
    你的加密解密函数就是来源于这个原理: 用一次异或进行加密,再用一次异或进行解密。2. 加密函数中,//把待加密字符串按字节和加密字符串中的相应字节进行异或,并转换成字符串(16进制)。
    //其中,每个字节加密时,循环使用加密字符串中的每个字节。
    for i:=1 to Length(Str) do 
    begin 
      Result:=Result+IntToHex(Byte(Str[i]) xor XorKey[j],2); 
      j:=(j+1) mod 8; 
    end; 
    3.解密函数中://因为加密函数中,IntToHex的第二个参数是2,使得原字符串加密后长度增加一倍。
    //所以在解密函数中,要先算出相应的位,再进行一次异或,得到原串。
    for i:=1 to Length(Str) div 2 do 
    begin 
      Result:=Result+Char(StrToInt('$'+Copy(Str,i*2-1,2)) xor XorKey[j]); 
      j:=(j+1) mod 8; 
    end; 
      

  8.   

    function StrEnCrypt(Str: string): string; //加密字符串函数
    var
      i,Len: integer;
      C: Byte;
      s: string;
    begin
      Len:=Length(Str);
      s:='';
      for i:=1 to Len do
      begin
        C:=Ord(Str[i]);
        if (C and $01)=$01 then
        begin
          C:=C shr 1;
          C:=C or $80;
        end
        else
          C:=C shr 1;
        C:=C xor $A8;    s:=s+Chr(C);
      end;
      Result:=s;
    end;function StrDeCrypt(Str: string): string; //解密字符串函数
    var
      i,Len: integer;
      C: Byte;
      s: string;
    begin
      Len:=Length(Str);
      s:='';
      for i:=1 to Len do
      begin
        C:=Ord(Str[i]);
        C:=C xor $A8;
        if (C and $80)=$80 then
        begin
          C:=C shl 1;
          C:=C or $01;
        end
        else
          C:=C shl 1;    s:=s+Chr(C);
      end;
      Result:=s;
    end;
      

  9.   

    const  XorKey:array[0..7] of Byte=($B2,$09,$AA,$55,$93,$6D,$84,$47); //字符串加密用然后在程序里加入以下两个函数,具体用法就不用多说了吧!function Enc(Str:String):String;//字符加密函數 這是用的一個異或加密
    var
    i,j:Integer;
    begin
    Result:='';
    j:=0;
    for i:=1 to Length(Str) do
      begin
      Result:=Result+IntToHex(Byte(Str[i]) xor XorKey[j],2);
      j:=(j+1) mod 8;
      end;
    end;function Dec(Str:String):String;//字符解密函數
    var
    i,j:Integer;
    begin
    Result:='';
    j:=0;
    for i:=1 to Length(Str) div 2 do
      begin
      Result:=Result+Char(StrToInt('$'+Copy(Str,i*2-1,2)) xor XorKey[j]);
      j:=(j+1) mod 8;
      end;
    end;