function UnCrypKey(Src: string; Key: string): string;
var
KeyLen: Integer;
KeyPos: Integer;
offset: Integer;
SrcPos: Integer;
SrcAsc: Integer;
TmpSrcAsc: Integer;
dest: string;
begin
TmpSrcAsc := 0;
KeyPos := 0;
KeyLen := Length(Key);
offset := StrToInt('$' + Copy(Src, 1, 2)); //转化成16进制整形数
SrcPos := 3;
repeat //循环
SrcAsc := StrToInt('$' + Copy(Src, SrcPos, 2));
if KeyPos < KeyLen then KeyPos := KeyPos + 1
else KeyPos := 1; TmpSrcAsc := SrcAsc xor Ord(Key[KeyPos]);
if TmpSrcAsc <= offset then TmpSrcAsc := 255 + TmpSrcAsc - offset
else TmpSrcAsc := TmpSrcAsc - offset;
dest := dest + chr(TmpSrcAsc); offset := SrcAsc;
SrcPos := SrcPos + 2;
until SrcPos >= Length(Src);
Result := dest;
end;
var
KeyLen: Integer;
KeyPos: Integer;
offset: Integer;
SrcPos: Integer;
SrcAsc: Integer;
TmpSrcAsc: Integer;
dest: string;
begin
TmpSrcAsc := 0;
KeyPos := 0;
KeyLen := Length(Key);
offset := StrToInt('$' + Copy(Src, 1, 2)); //转化成16进制整形数
SrcPos := 3;
repeat //循环
SrcAsc := StrToInt('$' + Copy(Src, SrcPos, 2));
if KeyPos < KeyLen then KeyPos := KeyPos + 1
else KeyPos := 1; TmpSrcAsc := SrcAsc xor Ord(Key[KeyPos]);
if TmpSrcAsc <= offset then TmpSrcAsc := 255 + TmpSrcAsc - offset
else TmpSrcAsc := TmpSrcAsc - offset;
dest := dest + chr(TmpSrcAsc); offset := SrcAsc;
SrcPos := SrcPos + 2;
until SrcPos >= Length(Src);
Result := dest;
end;
int keyLen;
int keyPos;
int offset;
int srcPos;
int srcAsc;
int tmpSrcAsc;
string dest; tmpSrcAsc = 0;
keyPos = 0;
keyLen = key.Length;
offset = int.Parse(src.Substring(0, 2), NumberStyles.HexNumber);
srcPos = 2;
dest = ""; do
{
srcAsc = int.Parse(src.Substring(srcPos, 2), NumberStyles.HexNumber);
if (keyPos < keyLen)
keyPos++;
else
keyPos = 1;
tmpSrcAsc = srcAsc ^ (int)key[keyPos];
if(tmpSrcAsc < offset)
tmpSrcAsc = 255 + tmpSrcAsc - offset;
else
tmpSrcAsc -= offset;
dest += (char)tmpSrcAsc;
offset = srcAsc;
srcPos =+ 2;
} while(srcPos < src.Length);
return dest;
}