![]() |
crypt()-Funktion aus Linux/Unix/PHP für Delphi? (Passwort-Hash)
Wo wir es gerade im Thema nebenan schon mit Verschlüsselung und PHP haben, ich hätte da auch noch einen:
Ich bin gerade dabei, ein älteres php-Projekt neu in Delphi umzusetzen und bin dabei darüber gestolpert, dass der Kollege damals zum Berechnen der Passwort-Hashes die Funktion "crypt()" von PHP benutzt hat, welche wiederum eine bei Linux/Unix mitgelieferte Funktion crypt() nutzt. Das ist ziemlich uncool, weil die Funktion eigentlich schon damals (so etwa 2010) kaum noch jemand benutzt hat, weil sie nicht besonders sicher ist. Die Funktion nutzt eine Abwandlung der DES-Verschlüsselung, um die Passwort-Hashes zur erstellen: ![]() ![]() Ich würde jetzt natürlich gerne dafür sorgen, dass die Passwörter der Benutzer weiter gültig bleiben, wenn ich die Anwendung auf Delphi umstelle (ich würde die Passwörter dann nach/beim Login neu mit einer modernen Hash-Funktion speichern), aber dazu müsste ich den Hash erst einmal bilden können. Weil die Funktion schon vor einiger Zeit aus der Mode gekommen ist, findet man dazu kaum etwas aktuelles. In System.Hash bei Delphi ist sie nicht dabei und auch im aktuellen DEC habe ich sie nicht gesehen. Alle Diskussionen zum Thema "crypt() in Delphi" sind eher so von 2003/2004, zuletzt mal was von 2010, aber die Links laufen alle ins Leere oder zu seit Jahren nicht mehr gepflegten Komponenten, die wahrscheinlich nicht unter Rio funktionieren. Kurz: hat irgendwer eine funktionierende Implementation von crypt für Delphi, die auch unter einem aktuellen Delphi noch läuft? Mein Plan B ist übrigens: MariaDB unter Linux bringt auch die Funktion "ENCRYPT" mit, welche ebenfalls "crypt()" aufrufr. Insofern: falls ich nichts für Delphi finde, dann würde ich die Hash-Berechnung für die Übergangszeit von der Datenbank machen lassen. Alternativ könnte auch ein Plan C sein: da das fertige Programm eh unter Linux laufen soll, könnte ich ja auch selber die crypt()-Funktion aufrufen. Nur weiß ich unter Linux noch nicht wirklich, wie man Funktionen aus Bibliotheken einbindet, für die Emba noch nichts vorbereitet hat - das kenne ich bisher nur mit DLLs aus Windows. :-) |
AW: crypt()-Funktion aus Linux/Unix/PHP für Delphi? (Passwort-Hash)
Hi,
eventuell mal lockbox 2 versuchen?!? |
AW: crypt()-Funktion aus Linux/Unix/PHP für Delphi? (Passwort-Hash)
Hm, nee, leider nicht, wenn ich die richtig verstanden habe. Habe gerade mal in Lockbox 2 und 3 reingeschaut. Da ist zwar in beiden DES mit dabei, aber leider das "richtige" DES, also die synchrone Verschlüsselung. Leider nicht die DES-Abwandlung für Hashes, welche crypt() benutzt.
|
AW: crypt()-Funktion aus Linux/Unix/PHP für Delphi? (Passwort-Hash)
Schade. Eins fällt mir noch ein. DCPcrypt. Vielleicht geht es damit.
|
AW: crypt()-Funktion aus Linux/Unix/PHP für Delphi? (Passwort-Hash)
Da sieht es leider genau so aus, also: DEC ist vorhanden, aber leider nur für Cipher, nicht für Hash.
Immer vorausgesetzt, ich verstehe das da alles richtig, ist ja nicht das leichteste Thema. :-) Dennoch Danke für deine Hilfe! |
AW: crypt()-Funktion aus Linux/Unix/PHP für Delphi? (Passwort-Hash)
Hmm..
Welchen HASH nutzt den das crypt() bei deiner PHP-App? Je nach Salt / PHP-Version.. wird ein anderer verwendet. Hast Du mal ein Beispiel für deinen HASH-String, wie er in deinem System für die User abgelegt wurde. Such eventuell mal nach htpasswd, dafür wird auch das crypt() verwendet. Jedoch kann der HASH in verschiedenen Typen dort hinterlegt sein. In htpasswd wird am Anfang des HASH der Typ und das Salt angegeben, z.B. $2y$10$xxxxxxxx ![]() ![]() ![]() Erst wenn Du weist, welcher Algorithmus verwendet wird/wurde, kannst Du diesen in Delphi nachbilden. |
AW: crypt()-Funktion aus Linux/Unix/PHP für Delphi? (Passwort-Hash)
Zitat:
Die von dir beschriebene Erweiterung, dass crypt auch mit anderen Hash-Algorithmen wie MD5, SHA-256 oder SHA-512 benutzt werden kann und die auch von PHP so "durchgereicht" würde, ist in der oben verlinkten Manpage im Abschnitt "Features in glibc" beschrieben. Ein Hash würde dann in der Tat mit etwas wie $1$... anfangen. Das wird aber in meinem Fall nicht genutzt (einen MD5- oder SHA-Hash bekäme ich ja mit Delphi problemlos umgesetzt, System.Hash sei Dank). Daher wird der auf DES basierende Hash benutzt. Den erkennt man z.B. daran, dass er nur die ersten zwei Zeichen eines Salt beachtet und diese auch dem Hash voranstellt. Der Aufruf von crypt('hallo','wuppdi') ergibt zum Beispiel wuOMJogK0sP0c (der Aufruf von crypt('hallo','wumms') übrigens auch ;-) ). Ich schau mal, ob ich mit htpasswd weiterkomme - Danke für den Tipp! Spreche nichts dagegen, das lokal aufzurufen, um diese ollen Passwörter verarbeiten zu können. |
AW: crypt()-Funktion aus Linux/Unix/PHP für Delphi? (Passwort-Hash)
Nachtrag zu htpasswd - leider hilft auch der unter Windows nicht:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:12 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