![]() |
String Blowfish verschlüsseln OHNE DEC
Hallo!
Ich möchte einen String mittels Blowfish verschlüsseln und entschlüsseln. Dazu möchte ich eine möglichst schlanke und einfache Unit schreiben. Ich möchte dabei *nicht* das DEC benutzen, da mein Code später in eine Standardsoftware einfliesst und es nicht möglich ist, das doch recht umfangreiche DEC einzubinden. Ich habe schon mehrere Stunden Recherche im Netz und hier im Forum investiert, aber bin leider nicht fündig geworden. Leider reicht mein Kryptographiewissen auch nicht aus, um selbst eine solche Klasse/Unit zu schreiben. Auch die entsprechenden Funktionalitäten aus dem DEC zu ziehen, ist mir nicht gelungen. :wiejetzt: Daher meine Frage, ob jemand vielleicht schon sowas gelöst hat und mir zur Verfügung stellen könnte oder einen hilfreichen Link hat. Vielleicht kann auch jemand den Code dafür hier posten, wenn es nicht dem Umfang sprengt. :-D Ideal wäre eine schlanke und einfache Implementierung des Blowfish Algorithmus und Funktionen zum Codieren und Decodieren. Danke für Eure Antworten und Hilfestellungen! |
Re: String Blowfish verschlüsseln OHNE DEC
Hallo,
kannst im Web mal nach LockBox suchen. Das sind Komponeten zum verschlüsseln. und der Link dazu -> ![]() Grüße Klaus |
Re: String Blowfish verschlüsseln OHNE DEC
Zitat:
|
Re: String Blowfish verschlüsseln OHNE DEC
Hi,
die Lockbox werde ich mir mal anschauen, danke für den Tipp. @Luckie: Ja, ich weiss, aber ich hätte gerne etwas weniger umfangreiches. :? |
Re: String Blowfish verschlüsseln OHNE DEC
Lockbox wird aber noch mehr deine Source und die fertigen Module aufblähen.
Bindest du das neue DEC 5.1. ein kann ich dir garantieren das fast keinerlei zusätlicher Overhead ausser dem Blowfish Algo. eingebunden wird. Das ist ja gerade ein wichtiger Verbesserungpunkt im DEC 5.1. Aber das ist letzendlich deine Entscheidung. Gruß Hagen |
Re: String Blowfish verschlüsseln OHNE DEC
Hallo nochmal,
ich sehe ich habe mir das wohl auch etwas zu einfach vorgestellt. Ich werde dann jetzt doch mal das dec versuchen. Ich danke Euch auf jedenfall für Eure Antworten! :-D Ciao |
Re: String Blowfish verschlüsseln OHNE DEC
Vielleicht könnt ihr mir bei benutzen des DEC Hilfe geben, ich blicke da nicht ganz durch. :oops:
Meine Unit bekommt einen Blowfish-Verschlüsselten Querystring übergeben (base64 encoded), das Passwort weiss ich. Ich möchte diesen verschlüsselten Querystring nun einfach nur entschlüsseln und als String weiternutzen. Wie mache ich das am besten? Ich habe mir aus einem Post von Hagen mal die untenstehende Funktion herauskopiert und leicht modifiziert, aber noch läuft da nichts:
Delphi-Quellcode:
Meine Fragen:
unit ucpDecryptExternQueryString;
... uses ..., DECCipher, DECUtil, DECRandom, DECHash; ... function TCPDecryptExternQueryString.Decipher: string; begin with TCipher_Blowfish.Create do try Mode := cmCTSx; // <--- Welchen Mode nehme ich hier am besten? Init('Passwort'); Result := DecodeBinary('Test Nachricht', TFormat_HEX); // <---- Frage 2 finally Free; end; end; 1. Welchen Mode muss ich nutzen, und warum? Den Querystring, den ich übergeben bekomme, kommt von einem Portal dessen Code ich nicht kenne und ich weis nicht, mit welchen Mitteln dort Blowfish-Verschlüsselt wird. Muss dort zum entschlüsseln derselbe Mode verwendet werden? Ich habe von Kryptografie leider so garkeine Ahnung. 2. Ist DecodeBinary hier die richtige wahl? Ich habe ja einen String und will einen String... 3. Was fehlt in der obigen Unit sonst noch, damit die entschlüsselung läuft? Delphi (7) meckert bei mir z.B. auch, dass er TFormat_HEX nicht kennt. Vielen Dank schonmal im Vorraus für Eure Hilfe. Ich denke das auch viele andere Forumsleser davon profitieren können. |
Re: String Blowfish verschlüsseln OHNE DEC
Ok ich stelle par Fragen und du antwortest mit JA/NEIN
1.) das Passwort ändert sich nur sehr wenig, weil es in der EXE steht ? 2.) du möchtest vorrangig kurze Strings schützen ? 3.) verschlüsselst du oft mit diesen einem Passwort auch die gleichen Strings ? Heist also ein String wie "Test" wird öfters ver/entschlüsselt ! 4.) wie sicher muß das alles werden ? sehr sicher ? Gruß Hagen |
Re: String Blowfish verschlüsseln OHNE DEC
Zitat:
Danke! |
Re: String Blowfish verschlüsseln OHNE DEC
Ok.
Bei kurzen Strings immer einen starken Feadback Modus benutzen der mit kleinem Feedback arbeitet. Also zb. cmCFB8 ist eine gute Wahl oder cmCFS8 wäre noch besser ist aber eine prohibitäre Entwicklung meinerseits. Solche Modis sind ca. 8 bis 16 mal langsammer als zv. cmCBCx oder cmCFSx dafüer aber gerade bei kurzen Daten weitaus sicherer. Da sich das Passwort nicht verändert sollte man sicherstellen das wenigsten der verschlüsselte Output ein und derselben Nachricht sich ständig ändert. Das geht nätürlich nur wenn diese Nachricht sich virtuell jedesmal ändert. Lang Rede kurzer Sinn. Vor der Verschlüsselung deines Strings solltest du diesen mit 1-4 Bytes Zufallsdaten am Anfang des Strings ergänzen. Das führt dazu das der gleiche Text immer komplett anderen verschlüsselten Output erzeugt und somit ein Angreifer keine schnellen Angriffe mehr durchführen kann. Das ist qausi wie ein Passwort Salt nur eben innerhalb der Nachricht. Der Feedback Modus cmCFB8 wird dann dafür sorgen das sich diese 1-4 Bytes Zufall komplett durch die ganze Verschlüsselungen deines Strings zieht. Dir sollte aber klar sein das durch die Benutzung des festen Passwortes für alle Daten eine Alles oder Nichts Sicherheit ergibt. Wurde der Keys einmal geknackt sind alle deine Daten unsicher. So nun ein par Sourcen
Delphi-Quellcode:
Du kannst nun selber ausrechnen wie groß ein verschlüsselter String in der Länge sein wird,
const
Password: TGUID = {1234-1234-....} // mit Strg+G+G eine eigene GUID erzeugen // das Password ist binär und nicht so schnell und direkt mit stupidem HEX Editor zu lesen CipherClass: TDECCipherClass = TCipher_Blowfish; CipherMode: TDECCipherMode = cmCFB8; SaltLenght: Integer = 4; TextFormat: TDECFormat = TFormat_MIME64; function Encrypt(const Value: String): String; begin with ValidCipher(CipherClass).Create do try Mode := CipherMode; Init(Password, SizeOf(Password)); Result := EncodeBinary(RandomBinary(SaltLength) + Value, TextFormat); finally Free; end; end; function Decrypt(const Value: String): String; begin with ValidCipher(CipherClass).Create do try Mode := CipherMode; Init(Password, SizeOf(Password)); Result := System.Copy(SaltLength +1, MaxInt, DecodeBinary(Value, TextFormat)); finally Free; end; end; MIME64_Länge := (Salt_Länge + String_Länge + 3) div 3 * 4 Ein 256 Zeichenstring ist also (256 + 4 + 3) div 3 * 4 = 348 Zeichen lang als MIME Base 64 formatierter und verschl. String. Gruß Hagen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:58 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-2025 by Thomas Breitkreuz