Einzelnen Beitrag anzeigen

Bbommel

Registriert seit: 27. Jun 2007
Ort: Köln
652 Beiträge
 
Delphi 12 Athens
 
#1

crypt()-Funktion aus Linux/Unix/PHP für Delphi? (Passwort-Hash)

  Alt 19. Nov 2019, 09:24
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:
https://www.php.net/manual/de/function.crypt.php
http://man7.org/linux/man-pages/man3/crypt.3.html

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.
  Mit Zitat antworten Zitat