Anlässlich des verfrühten Weihnachtsgeschenkes von TurboMagic (Danke!) hab ich mir mal das
DEC angeschaut. Vieles was da in
DEC angeboten wird, kann ich verstehen und nachvollziehen, auch mit Hilfe der beiligenden Beispiele.
Mein Problem:
Eine sichere Blockverschlüsselung beinhaltet für mich
1. Passwordhash
2. Salz
3. Verschlüsseln
Meine Versuche das zu realisieren scheitern aber grandios, hauptsächlich wohl daran, dass mir das grundlegende Verständnis für Verschlüsslung fehlt.
Mein Versuch um Salz einzustreuen
Delphi-Quellcode:
//FPassord: utf8String;
function MyClass.GenerateHashedPw: TBytes;
var
Hash: THash_SHA256;
Salt: Cardinal;
SaltBytes: TBytes;
PW: TBytes;
HashedPw: TBytes;
begin
Salt:= Random(16);
Hash:= THash_SHA256.create;
try
// Transform inputs to Bytes
SaltBytes:= TEncoding.utf8.GetBytes(inttostr(Salt));
PW:= TEncoding.utf8.GetBytes(FPassword);
//Generate Hashed PW
HashedPw:= Hash.KDF1(PW, SaltBytes, Cipher.Context.KeySize);
result:= HashedPw;
finally
Hash.Free;
end;
anschliessend verschlüssle ich Text
Delphi-Quellcode:
//cipher: Cipher:= TCipher_AES
//FIV, FFIler: TBytes
Cipher.Init(GenerateHashedPw, FIV, FFiller);
result:= Cipher.EncodeStringToString(PlainText, TFormat_BASE64));
Beim Entschlüsseln des Strings erhalte ich aber ein falsches Resultat. Lasse ich das Salz weg, funktioniert alles.
Frage oder Bitte:
Gibt es irgendwo ein vollständiges Beispiel für Verschlüsselung mit Salz oder kann mir jemand erklären wie ich das Salz korrekt verwende?