求一个解决思路:用一个数字密钥,加密解密一个字符串
要用IdHTTP传输一个字符串,长度不固定,但内容是3个字段的值,用#隔开,比如:
Str := 'abc#123#论坛朋友们;新年好#';
有一个密钥,固定为5位数字,比如:51353
希望用密钥51353对字符串Str进行加密
成为下面的格式:
51353|加密后的Str
服务器收到后,会使用51353进行解密
得到原字符串
请求一个思路?
[解决办法]
最简单的循环按位xor
function encode(const Src, Key : string): string;
var
i: Integer;
lSrc, lKey: Integer;
begin
lSrc := Length(src);
lKey := Length(Key);
SetLength(Result, lSrc);
for i := 1 to lSrc do
begin
Result[i] := Chr(Ord(Src[i]) xor Ord(Key[(i-1) mod lKey + 1]));
end;
Result := Key + '
[解决办法]
' + Result;
end;
function decode(const Src: string): string;
var
i: Integer;
Key: string;
lSrc, lKey: Integer;
begin
Result := '';
lKey := Pos('
[解决办法]
', Src) - 1;
if lKey <= 0 then
Exit;
lSrc := Length(Src);
Key := Copy(Src, 1, lKey);
SetLength(Result, lSrc - lKey - 1);
for i := lKey + 2 to lSrc do
begin
Result[i-lKey-1] := Chr(Ord(Src[i]) xor Ord(Key[(i-lKey-2) mod lKey + 1]));
end;
end;
ShowMessage(decode(encode('abc#123#论坛朋友们;新年好#', '51353')));