我使用的是一个网上常见的异或算法
代码如下:
function TForm1.Encrypt(const S: string; Key: Word): string;
var
I: byte;
begin
setlength(Result,length(S));
for I := 1 to Length(S) do begin
Result[I] := char(byte(S[I]) xor key);
Key := (byte(Result[I]) + Key) * C1 + C2;
end;
end;function TForm1.Decrypt(const S: string; Key: Word): String;
var
I: byte;
begin
setlength(Result,length(S));
for I := 1 to Length(S) do begin
Result[I] := char(byte(S[I]) xor key);
Key := (byte(S[I]) + Key) * C1 + C2;
end;
end;
其中的C1、C2、key我都在unit中设置为常量
主要的问题在于:
对汉字的加密、解密效果很好
但是对于非汉字,那么就出现了问题:
经常少显示一位
这情况发生在被加密字符串的个数大于1,且为单数的时候
我想这个应该是char的问题,但是不知道怎么解决
希望各位能指点一下另外原来的算法中
Result[0] := S[0];
不能编译成功
我使用setlength(Result,length(S));
或者Result:=S;均能正常使用
使用的是Delphi 10 lite