要翻译的代码为:
//解密函数
Function UncrypKey(Src:String; Key:String):string;
var
idx :integer;
KeyLen :Integer;
KeyPos :Integer;
offset :Integer;
dest :string;
SrcPos :Integer;
SrcAsc :Integer;
TmpSrcAsc :Integer;
Range :Integer;
begin
KeyLen:=Length(Key);
if KeyLen = 0 then
key:='Think Space';
KeyPos:=0;
SrcPos:=0;
SrcAsc:=0;
Range:=256;
offset:=StrToInt('$'+ copy(src,1,2));
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;
//解密函数
Function UncrypKey(Src:String; Key:String):string;
var
idx :integer;
KeyLen :Integer;
KeyPos :Integer;
offset :Integer;
dest :string;
SrcPos :Integer;
SrcAsc :Integer;
TmpSrcAsc :Integer;
Range :Integer;
begin
KeyLen:=Length(Key);
if KeyLen = 0 then
key:='Think Space';
KeyPos:=0;
SrcPos:=0;
SrcAsc:=0;
Range:=256;
offset:=StrToInt('$'+ copy(src,1,2));
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;
要不先换成java的,然后在换成C#
public string Encrypt(string src, string key)
{
int keyLen = key.Length;
if (keyLen == 0)
{
key = "Think Space";
} int keyPos = 0;
int srcAsc = 0; Random r = new Random();
int offset = r.Next(256); string dest = offset.ToString("X02"); byte[] valueBytes = Encoding.Default.GetBytes(src);
byte[] keyBytes = Encoding.Default.GetBytes(key); for (int srcPos = 0; srcPos < src.Length; srcPos++)
{
srcAsc = (valueBytes[srcPos] + offset) % 255;
if (keyPos < key.Length)
{
keyPos = keyPos + 1;
}
else
{
keyPos = 1;
}
srcAsc = srcAsc ^ keyBytes[keyPos - 1];
dest = dest + srcAsc.ToString("X02");
offset = srcAsc;
}
return dest;
}
//解密
public string Decrypt(string src, string key)
{
int keyLen = key.Length;
if (keyLen == 0)
{
key = "Think Space";
} int keyPos = 0;
int srcAsc = 0;
int tmpSrcAsc = 0;
string dest = string.Empty;
byte[] keyBytes = Encoding.Default.GetBytes(key); int offset = int.Parse(src.Substring(0, 2), System.Globalization.NumberStyles.HexNumber);
int scrPos = 2;
while (scrPos < src.Length)
{
srcAsc = int.Parse(src.Substring(scrPos, 2), System.Globalization.NumberStyles.HexNumber);
if (keyPos < keyLen)
{
keyPos = keyPos + 1;
}
else
{
keyPos = 1;
}
tmpSrcAsc = srcAsc ^ keyBytes[keyPos - 1];
if (tmpSrcAsc <= offset)
{
tmpSrcAsc = 255 + tmpSrcAsc - offset;
}
else
{
tmpSrcAsc = tmpSrcAsc - offset;
}
dest = dest + (char)tmpSrcAsc;
offset = srcAsc;
scrPos = scrPos + 2;
}
return dest;
}