AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign crypt()-Funktion aus Linux/Unix/PHP für Delphi? (Passwort-Hash)
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von Bbommel · begonnen am 19. Nov 2019 · letzter Beitrag vom 19. Nov 2019
Antwort Antwort
Bbommel

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

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

  Alt 19. Nov 2019, 10: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
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.212 Beiträge
 
Delphi 2007 Architect
 
#2

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

  Alt 19. Nov 2019, 12:01
Hi,
eventuell mal lockbox 2 versuchen?!?
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
Bbommel

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

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

  Alt 19. Nov 2019, 12:21
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.
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.212 Beiträge
 
Delphi 2007 Architect
 
#4

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

  Alt 19. Nov 2019, 12:33
Schade. Eins fällt mir noch ein. DCPcrypt. Vielleicht geht es damit.
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
Bbommel

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

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

  Alt 19. Nov 2019, 15:17
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!
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
972 Beiträge
 
Delphi 6 Professional
 
#6

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

  Alt 19. Nov 2019, 16:02
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

https://www.php.net/manual/de/function.crypt.php

https://en.wikipedia.org/wiki/Bcrypt
https://www.php.net/manual/de/functi...sword-hash.php

Erst wenn Du weist, welcher Algorithmus verwendet wird/wurde, kannst Du diesen in Delphi nachbilden.
(Ja ich Verwende Delphi 6 Pro und will NICHT wechseln!)
  Mit Zitat antworten Zitat
Bbommel

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

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

  Alt 19. Nov 2019, 21:28
Hmm..
Welchen HASH nutzt den das crypt() bei deiner PHP-App?
Je nach Salt / PHP-Version.. wird ein anderer verwendet.
Ich dachte eigentlich, dass ich das in meinen Posts beschrieben habe. crypt verwendet, wenn man nichts besonderes angibt, einen auf DES basierenden Hash-Algorithmus. Mehr dazu ist in den beiden Links zum PHP-Manual und zur Linux-Manpage beschrieben, die ich in meinem ersten Beitrag verlinkt habe.

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

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

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

  Alt 19. Nov 2019, 21:36
Nachtrag zu htpasswd - leider hilft auch der unter Windows nicht:

Zitat:
-d
Use crypt() encryption for passwords. This is not supported by the httpd server on Windows and Netware. This algorithm limits the password length to 8 characters. This algorithm is insecure by today's standards. It used to be the default algorithm until version 2.2.17
Hm. Dann bleibe ich wohl bei meinem Workaround mit dem Datenbankserver unter Linux.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz