Wie zu erwarten war, geht es natürlich nicht so einfach.
Möglicherweise ist der C#-Code ja nicht mit
DEC umkehrbar.
Deshalb wollte ich das jetzt mal mit deinem AES_CBC probieren, kriege da aber auch nur Zeichensalat raus.
Würdest du mir verraten, wie ich das implementieren muss?
Die Testvektoren sind:
Salt: Lovley
IV: 2013-02-14 15:45:07.307 (wenn ein AES-IV immer 16 Byte hat, heißt das, dass hier nur '2013-02-14 15:45' genommen wird?)
Base64-Ciphertext: d1n/OvzsX3r12qplF5izlg==
Plaintext: Test
Passwort (
ASCII-Werte): 7 14 31 13
Mein Versuch sieht wie folgt aus (Base64-Decode ist aus
DEC):
Delphi-Quellcode:
function DecryptBase64Str(const CipherText_Base64: Binary; const Password: Binary; const Salt: Binary; const InitVector: string): string;
var
hash: PHashDesc;
key: array[0..19] of byte;
ctx: TAESContext;
aesblck: TAESBlock;
decodedTxt: string;
i: Integer;
begin
hash:= FindHash_by_ID(_SHA1);
pbkdf1(hash,@Password[1], Length(password),@Salt[1],2,key,20);
for i := 1 to 16 do
aesblck[i-1]:= Byte(initvector[i]);
decodedTxt:= TFormat_MIME64.Decode(CipherText_Base64);
Result:= decodedTxt;
ctx.IV:= aesblck;
AES_CBC_Init_Decr(key,160,aesblck,ctx);
AES_CBC_Decrypt(@decodedTxt[1],@result[1],length(decodedTxt),ctx);
end;
Über die kryptographische Sicherheit lässt sich sicherlich streiten, aber es geht ja erstmal darum, dass zum Laufen zu bekommen.
Edit:
Was mir noch einfällt: die C#-Verschlüsselung benutzt PKCS7 als Paddingmodus.