![]() |
DCPcrypt Stringverschlüsselung
Hallo DP,
ich habe folgende Testfunktion geschrieben (kommt ursprünglich von ![]()
Delphi-Quellcode:
Ich würde erwarten, dass sich das Chiffrat bei jedem Durchlauf ändert, weil ja an das Passwort ein zufälliger String angehängt wird. Tut es aber merkwürdigerweise nicht. Es bleibt einfach gleich. Ändere ich das übergebene Passwort, ändert sich auch einmalig das Chiffrat und bleibt dann wieder gleich.
function EncryptStringDES_Test(const Text, Password: string): string;
var Cipher: TDCP_des; src, enc: TBytes; i, iLen: Integer; sPsw : string; begin Cipher := TDCP_des.Create(nil); try sPsw := Password; for i := 0 to 7 do sPsw := sPsw + Char(Random(26) + 65); // zum Testen nur zufällige Großbuchstaben anhängen Cipher.InitStr(sPsw, TDCP_sha256); src := TEncoding.UTF8.GetBytes(Text); iLen := length(src); SetLength(enc, iLen); Cipher.EncryptCBC(src[0], enc[0], iLen); Result := Soap.EncdDecd.EncodeBase64(enc, length(enc)); finally Cipher.Burn; Cipher.Free; end; end; // Aufruf procedure TfrmStrTests.btnEncryptClick(Sender: TObject); begin edEncrypted64.Text := EncryptStringDES_Test(edTextToEncrypt.Text, edPassword.Text); end; Das Verhalten tritt auf sobald das übergebene Passwort 8 Stellen oder länger ist. :?::cyclops::?: Beim Testen habe ich dann mal die For-Schleife 16 Durchläufe machen lassen und siehe da, das Chiffrat ändert sich bei jedem Durchlauf, wie gewünscht. Kann mir das jemand erklären? Hatte schon "vermurksten Speicher" im Verdacht und habe alles mal neu gestartet aber das Problem lässt sich standhaft reproduzieren. Habe statt TDCP_sha256 auch schon TDCP_sha1 probiert oder einen anderen Cipher-Typ, was aber am Verhalten auch nichts ändert. Bin etwas ratlos. DCPcrypt habe ich nicht installiert, sondern einfach die Sourcen in den Bibliothekspfad aufgenommen. Könnte es daran liegen oder an irgendwelchen Compileroptionen? Habe aber eigentlich keine besonderen Einstellungen... Grüße, Uwe |
AW: DCPcrypt Stringverschlüsselung
Wie lang sind denn Passwort und der Text?
Wird das Passwort vielleicht nur bis zu einer Maximallänge ausgewertet? Probier mal das komplette Passwort zufällig zu setzen. In dem Beispiel dort, das Erste unten in den Antworten, ![]() wird die Datengröße zusätzlich noch auf die Blockgröße erweitert (Padding), bevor verschlüsselt wird. |
AW: DCPcrypt Stringverschlüsselung
Hallo himitsu,
ja, das Padding habe ich nur in der Testfunktion rausgeworfen. Spielt bei dem Problem aber keine Rolle. Wenn ich das Passwort komplett zufällig wähle ändert sich das Chiffrat natürlich. :stupid: Hab doch geschrieben, dass es erst ab einer Passwortlänge von 8 und darüber auftritt. Das Problem tritt scheinbar unabhängig von der Textlänge auf. Ich werde mal alles auf RawBytestring ändern und schauen ob das was bringt. Würde aber wohl bedeuten, dass DCPcrypt nicht richtig auf Unicode umgestellt wurde. Es scheint jedenfalls so als ob das Verlängern des Passworts innerhalb der Funktion um 8 Zeichen keinerlei Einfluss auf den Hash hat. Very strange! Grüße, Uwe |
AW: DCPcrypt Stringverschlüsselung
Hat sich erledigt...
Ändert man:
Delphi-Quellcode:
in DCPcrypt2.pas nach:
procedure TDCP_hash.UpdateStr(const Str: string);
begin Update(Str[1],Length(Str)); end;
Delphi-Quellcode:
funktioniert es wie erwartet.
procedure TDCP_hash.UpdateStr(const Str: RawByteString);
begin Update(Str[1],Length(Str)); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:53 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz