Hi
ich will mit der
DEC 5.2 einen Text (Passwörter) Verschlüsseln, in einer Datei speichern und bei Eingabe eines Masterpassworts wieder laden und entschlüsseln. Ich bin am verzweifeln. Habe mir viele Beispiele Angeschaut und soweit auch verstanden wie alles funktioniert. Ich poste mal meine En und Decrypt Funktionen, Sowie meine Aufrufe und die Ausgabe des Memos
Encrypt:
Delphi-Quellcode:
function Encrypt(const Value: String; const Password: String): String;
var
Salt,SessionKey: Binary;
MyCiph : TDECCipher;
begin
MyCiph := ValidCipher(TCipher_Rijndael).Create;
Salt := RandomBinary(16);
try
SessionKey := THash_SHA1.KDF2(Password, Salt, MyCiph.Context.keysize, TFormat_Copy);
MyCiph.Mode := cmCTSx; // ein 8Bit Feedback Modus ist für kurze Datenmengen sicherer
MyCiph.Init(SessionKey);
Result := TFormat_MIME64.Encode(Salt + MyCiph.Encodebinary(Value, TFormat_Copy));
finally
MyCiph.Free;
ProtectBinary(Salt);
ProtectBinary(SessionKey);
end;
end;
Decrypt:
Delphi-Quellcode:
function Decrypt(const Value: String; const Password: String): String;
var
Salt,SessionKey: Binary;
MyCiph : TDECCipher;
begin
MyCiph := ValidCipher(TCipher_Rijndael).Create;
try
Result := TFormat_MIME64.Decode(Value);
Salt := Copy(Result, 1, 16);
SessionKey := THash_SHA1.KDF2(Password, Salt, MyCiph.Context.KeySize, TFormat_COPY);
MyCiph.Mode := cmCTSx;
MyCiph.Init(SessionKey);
MyCiph.Decode(Result[17], Result[1], Length(Result)-16); // inplaced Entschlüsselung
SetLength(Result, Length(Result) -16);
finally
MyCiph.Free;
ProtectBinary(SessionKey);
end;
end;
Aufruf in einem Button:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
rein: String;
crypt : String;
raus : String;
begin
rein :='geheimer Text';
Memo1.Lines.Add('Klar: ' +rein);
crypt := encrypt(rein,'passwort');
Memo1.Lines.Add('crypt: '+crypt);
raus := decrypt(crypt,'passwort');
memo1.Lines.Add('Klar: '+raus);
Memo1.Lines.Add('--------------');
end;
Und meine Ausgabe sieht dann nach 2x auf den Button Klicken so aus:
Code:
Klar: geheimer Text
crypt: ZooKq8i9/HSzDFymXfexXpMTNMMaduonMzbU+Rs=
Klar: ⑴ጺ顭훝빇át³\¦]
--------------
Klar: geheimer Text
crypt: wWwmW7P+VFYTRTxD+rY+jpHGl2Cndb2HA8+09Rs=
Klar: 콦䳑㷪឵瞐•VE<Cú
--------------
Zuletzt noch einige vom mir vermitete Fehlerquellen:
1. Bei Encrypt: .EncryptBinary
Bei Decrypt: .Decrypt
Ist das bei richtigen Parametern das gleiche?
2. .Init() wird nur mit einem Parameter aufgerufen,
erwartet aber eig. mehrere.
3. .Context.KeySize heißt in den meisten Beispielen immer
.MaxKeySize ... MaxKeySize gibt es aber in meiner
DEC 5.2
nicht!!!
4. Wenn ich alle Strings als ByteRawString deklariere, bekomme
ich als Ausgabe immer erstmal einige Fragezeichen und dann
erst chinesische Zeichen.
Falls jemand spontan eine lösung hat, dass mir nichtmehr alles auf chinesisch übersetzt wird, wäre ich dafür sehr dankbar.
lg und vielen Dank
Martin