Перенести код
Перенести код из Delphi в c# .net 2.0.
Если не можете собрать код - лучше не писать.
uses SysUtils, Classes, Wcrypt2;
...
function EncodeStr(inText:string): string;
var
Hash: HCRYPTHASH;
Key: HCRYPTKEY;
BufLen, DataLen: DWORD;
Str: String;
I: Integer;
begin
CryptAcquireContext(@Prov,nil,nil,PROV_RSA_FULL,CRYPT_VERIFYCONTEXT);
Stream:=TMemoryStream.Create;
try
CryptCreateHash(Prov,CALG_SHA,0,0,@Hash);
CryptHashData(Hash,PByte(Password),Length(Password),0);
CryptDeriveKey(Prov,CALG_RC2,Hash,0,@Key);
Stream.Clear;
Stream.WriteBuffer(Pointer(inText)^,Length(inText));
DataLen:=Length(inText);
BufLen:=Length(inText);
CryptEncrypt(Key,0,true,0,nil,@BufLen,0);
Stream.SetSize(BufLen);
CryptEncrypt(Key,0,true,0,PByte(Stream.Memory),@DataLen,BufLen);
SetLength(Str,BufLen);
Stream.Seek(0,soFromBeginning);
Stream.ReadBuffer(Pointer(Str)^,BufLen);
Result:=Str;
CryptDestroyKey(Key);
CryptDestroyHash(Hash);
finally
Stream.Free;
CryptReleaseContext(Prov,0);
end;
end;
function DecodeStr(inText:string): string;
var
Hash: HCRYPTHASH;
Key: HCRYPTKEY;
DataLen: DWORD;
Str: String;
begin
CryptAcquireContext(@Prov,nil,nil,PROV_RSA_FULL,CRYPT_VERIFYCONTEXT);
Stream:=TMemoryStream.Create;
try
CryptAcquireContext(@Prov,nil,nil,PROV_RSA_FULL,CRYPT_VERIFYCONTEXT);
CryptCreateHash(Prov,CALG_SHA,0,0,@Hash);
CryptHashData(Hash,PByte(Password),Length(Password),0);
CryptDeriveKey(Prov,CALG_RC2,Hash,0,@Key);
DataLen:=Length(inText);
Str := Copy(inText, 0, DataLen);
CryptDecrypt(Key,0,true,0,PByte(Str),@DataLen);
Result := Copy(Str, 0, DataLen);
CryptDestroyKey(Key);
CryptDestroyHash(Hash);
finally
Stream.Free;
CryptReleaseContext(Prov,0);
end;
end;Для проверки кода можно использовать
const
Password: String = '1234567890';Кодировка EncodeStr('1') = '®э_ѓ°Ќ°0'
На вход методов в c# подаётся строка.