So ich habe jetzt wieder etwas rumprobiert und mir deine Beispielunits vorgenommen.
Da ich ja nur auf der Suche nach einer pbkdf1-Implementierung war, habe ich die von dir genommen (siehe unten) und dazu die Rijndael-Implementierung aus dem
DEC. Das Key-Array habe ich entsprechend dem Beispiel in der t_kdf.pas
gewählt. Hier wirft rind.Init() allerdings den Fehler, der Key wäre zu groß.
Wenn ich den auf ein 20-Byte-Array reduziere (entsprechend der
RFC), dann kommt stattdessen die Fehlermeldung,
der IV wäre zu groß. Der IV ist im konkreten Beispiel '2013-02-14 15:45:07.307', das Salt ein 6-Zeichen-String.
Was mache ich falsch? Funktioniert das überhaupt zusammen mit dem
DEC oder muss ich AES_CBC_Decrypt aus deiner Lib nehmen? Wenn ja, könntest du mir da bitte erläutern, was die
Parameter bedeuten bzw. was da rein muss?
Delphi-Quellcode:
function DecryptBase64Str(const CipherText_Base64: Binary; const Password: Binary; const Salt: Binary; const InitVector: string): string;
var
key: array[0..63] of byte;
rind: TCipher_Rijndael;
pass: string;
hash: PHashDesc;
ctx: TAESContext;
begin
rind:= TCipher_Rijndael.Create;
rind.Mode:= cmCBCx;
hash:= FindHash_by_ID(_SHA1);
pbkdf1(hash,@Password, SizeOf(password),@Salt,2,key,16);//SizeOf(key));
rind.Init(key,Length(key),InitVector,SizeOf(InitVector));
Result:= rind.DecodeBinary(TFormat_MIME64.Decode(CipherText_Base64));
end;
Danke nochmal