首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

解决思路:用一个数字密钥,加密解密一个字符串

2014-01-22 
求一个解决思路:用一个数字密钥,加密解密一个字符串要用IdHTTP传输一个字符串,长度不固定,但内容是3个字段

求一个解决思路:用一个数字密钥,加密解密一个字符串
要用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')));

热点排行