So und nun noch zum Salt.
Ändere deine Methoden ab:
Delphi-Quellcode:
function TfrmManager.Encode(const Key: String; const Text: String): String;
var
Salt: Binary;
begin
with TCipher_Rijndael.Create do
try
Mode := cmCBCx;
Salt := RandomBinary(16);
Init(THash_SHA1.KDFx(Key, Salt, Context.KeySize));
Result := TFormat_MIME64.Encode(Salt + EncodeBinary(Text));
finally
Free;
end;
end;
function TfrmManager.Decode(const Key: String; const Text: String): String;
var
Data: Binary;
begin
with TCipher_Rijndael.Create do
try
Mode := cmCBCx;
Data := TFormat_MIME64.Decode(Text);
Init(THash_SHA1.KDFx(Key, Copy(Data, 1, 16), Context.KeySize));
Result := DecodeBinary(Copy(Data, 16, MaxInt));
finally
Free;
ProtectBinary(Data);
end;
end;
Du musst also den Passwort-Salt mit in deine Daten reinpacken, logisch sonst hast du ja zur Dekodierung nicht die gleiche Ausgangsituation. Die Verwendung eines Passwort-Salts mit einer KDF ist aber eine immer zu empfehlende Praxis, schützt sie doch perfekt das Passwort vor Brute Force Angriffe. Also lieber einen leicht komplizierteren Weg gehen dafür aber um vieles sicherer als ohne dieses Salt.
Achtung: obige Sourcestücken habe ich nicht getestet ! (Indizes in Copy())
Gruß Hagen