Hi automatix,
bist Du denn sicher, daß so wie Du es nutzt bei der alten
DEC auch der Hash vom Passwort angewendet wurde? Ich kenne leider die
DEC 3 nicht mehr so gut, aber wenn das Kennwort direkt als Basis der Verschlüsselung ohne Hash angewendet wird, wäre das eine mögliche Ursache.
Zu Deinem Code:
Zitat von
automatix:
Delphi-Quellcode:
var
CipherClass: TDECCipherClass = TCipher_Blowfish;
CipherMode: TCipherMode = cmCTSx;
HashClass: TDECHashClass = THash_RipeMD256;
function Decode(const aPasswort: string): string;
var
cipher: TDECCipher;
pw: Binary;
begin
cipher := nil;
Result := '';
try
cipher := ValidCipher(CipherClass).Create;
cipher.Mode := CipherMode;
// Edit: Ich hatte fälschlicherweise hier KEY durch aPasswort ersetzt, da ich
// von dem Fkt.Parameter ausging beim überfliegen. Mfg Assertor
pw := ValidHash(HashClass).CalcBinary(KEY);
cipher.Init(pw);
Result := cipher.DecodeBinary(aPasswort);
finally
FreeAndNil(cipher);
end;
end;
Ich würde jetzt
1) prüfen, ob in der
DEC 3 der Hash oder das Passwort direkt verwendet wird
2) prüfen, in welchem Format die Ausgabe des Hash bzw. Ciphers vorliegt
Es kann ja z.B. sein das bei der
DEC 3 das Encoding bsp. einen MIME32 oder HEX-Text zurückliefert. Dies wäre dann mit deinem obigen
DEC 5.2 Code inkompatibel, hier müsstest Du entsprechend das Encoding anpassen.
Ich hätte jetzt fast gesagt, nenn mir mal einen Beispieltext aus der Registry und das Passwort, dann guck ich ob das geht - aber das scheidet wohl aus wegen gewisser Sicherheitsaspekte
Gruß Assertor
P.S.: Zusätzlich kannst Du schon den Code für D2009 "vorbereiten" in dem Du - ähnlich meinem
DEC 5.2 Beispiel - Length(aPasswort) * SizeOf(aPasswort[1]) nutzt. Dann kommt bei einer Umstellung der Code auch mit der geänderten Größe der Chars klar.