我总想加密程序中的一些字符串,弄了几天都弄不懂。这是我在网上找的字符串加密代码。我想请大家给我讲解一下他这是什么意思。特别是这段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;
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;
下面差不多的过程
A xor 1 = not A
A xor 0 = A
楼主还是看2楼的吧
xor加密非常不规范的。偶尔会返回错误的,网上找一下crc也可以!
A xor B = C;那么C xor B = A,A xor C = B
一个数字,和另一个数字连续异或两次,会得到本身。
你的加密解密函数就是来源于这个原理: 用一次异或进行加密,再用一次异或进行解密。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;
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;
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;