PHP/Perl - crypt()
Miky
- php
Tachchen zusammen,
vorweg: Ich bin PHP-Neuling, also sorry schonmal, falls die Frage recht dämlich oder zu einfach ist.
Gibt es eine Möglichkeit, möglicherweise auch über einige Kunstgriffe, derzeitig per Perl-crypt und Salt erzeugte Passwörter mit PHP zu rekonstruieren? Meine ersten Versuche in der Richtung schlugen leider fehl, auch im Netz konnte ich auf die Schnelle nichts finden.
Darum die Frage, ob es generell möglich ist oder ob die crypt-Methoden doch dermaßen unterschiedlich arbeiten, dass hier quasi ein "no way" eintritt.
Hintergrund, falls interessant: Eine Kunden-DB, momentan per Perl gehostet, soll in eine PHP/MySQL-DB überführt werden und dabei sollen natürlich möglichst die alten Accounts der Kunden mit den alten Passwörtern weiter nutzbar bleiben. Darum wäre es eben schön, wenn man mit PHP die alten, per Perl erzeugten Passwörter für´s Login rekonstruieren könnte (also selbstverständlich nur die verschlüsselten Passwörter, nicht im Klartext...)
Oder gibt´s da ne ganz andere, möglicherweise viel elegantere Methode, die ich noch nich kenne?
Gruß & Danke im Voraus,
Miky
Yo,
"rekonstruieren" a.k. wieder lesbar machen wird sicherlich nicht gehen. Aber ich dachte dass sowohl der Perl als auch der PHP crypt auf der unix crypt Funktion basieren und gleich funktionieren. Wenn du ein mit Perl encryptetes Passwort in der mysql DB speicherst, und dann das selbe Passwort mit PHP mit dem selben Salt encryptest, kriegst du dann keine Übereinstimmung?
Gruß,
Cruz
Tachchen zusammen,
vorweg: Ich bin PHP-Neuling, also sorry schonmal, falls die Frage recht dämlich oder zu einfach ist.
Gibt es eine Möglichkeit, möglicherweise auch über einige Kunstgriffe, derzeitig per Perl-crypt und Salt erzeugte Passwörter mit PHP zu rekonstruieren? Meine ersten Versuche in der Richtung schlugen leider fehl, auch im Netz konnte ich auf die Schnelle nichts finden.
Darum die Frage, ob es generell möglich ist oder ob die crypt-Methoden doch dermaßen unterschiedlich arbeiten, dass hier quasi ein "no way" eintritt.
Hintergrund, falls interessant: Eine Kunden-DB, momentan per Perl gehostet, soll in eine PHP/MySQL-DB überführt werden und dabei sollen natürlich möglichst die alten Accounts der Kunden mit den alten Passwörtern weiter nutzbar bleiben. Darum wäre es eben schön, wenn man mit PHP die alten, per Perl erzeugten Passwörter für´s Login rekonstruieren könnte (also selbstverständlich nur die verschlüsselten Passwörter, nicht im Klartext...)
Oder gibt´s da ne ganz andere, möglicherweise viel elegantere Methode, die ich noch nich kenne?
Gruß & Danke im Voraus,
Miky
Yo,
"rekonstruieren" a.k. wieder lesbar machen wird sicherlich nicht gehen. Aber ich dachte dass sowohl der Perl als auch der PHP crypt auf der unix crypt Funktion basieren und gleich funktionieren. Wenn du ein mit Perl encryptetes Passwort in der mysql DB speicherst, und dann das selbe Passwort mit PHP mit dem selben Salt encryptest, kriegst du dann keine Übereinstimmung?
Gruß,
Cruz
Hallo,
ne, eben nich - das, was du da beschreibst, war eben genau meine Hoffnung, aber so klappt´s nich....
Beispiel: das Passwort miky1 wird per Perl-crypt() mit (zum Test festgelegtem) Salt 'SL' zu SLR1U5HLisJLY.
Dasselbe unter PHP wird zu SLTIYxJb5JDu6.
Da ja aber (augenscheinlich) das Format passen würde, dachte ich, dass per Parameter eine Anpassung erfolgen könnte...
Hallo,
Beispiel: das Passwort miky1 wird per Perl-crypt() mit (zum Test festgelegtem) Salt 'SL' zu SLR1U5HLisJLY.
Wie das?
Dasselbe unter PHP wird zu SLTIYxJb5JDu6.
Das stimmt. Macht auch Perl bei mir, genauso wie PHP:
#!/usr/bin/perl -w
print crypt ('miky1', 'SL');
print "\n";
Gibt bei mir auch SLTIYxJb5JDu6. (ohne Punkt versteht sich)
Grüße,
Christian
Ich habe auch das selbe Ergebnis.
Miky wenn du unterschiedliche Strings aus der crypt Funktion rauskriegst, tippe ich als erstes mal, dass die Salts doch unterschiedlich sind.
Hallo,
Beispiel: das Passwort miky1 wird per Perl-crypt() mit (zum Test festgelegtem) Salt 'SL' zu SLR1U5HLisJLY.
Wie das?
Dasselbe unter PHP wird zu SLTIYxJb5JDu6.
Das stimmt. Macht auch Perl bei mir, genauso wie PHP:
#!/usr/bin/perl -w
print crypt ('miky1', 'SL');
print "\n";
Gibt bei mir auch SLTIYxJb5JDu6. (ohne Punkt versteht sich)
Grüße,
Christian
ächz! Ja, danke, ihr habt natürlich recht....ich hab mich mitm Salz verschmissen. Sorry - andererseits bin ich dennoch nur durch eure Hilfe drauf gekommen. Danke nochmal euch beiden!
Gruß,
Miky
Ich habe auch das selbe Ergebnis.
Miky wenn du unterschiedliche Strings aus der crypt Funktion rauskriegst, tippe ich als erstes mal, dass die Salts doch unterschiedlich sind.
Hallo,
Beispiel: das Passwort miky1 wird per Perl-crypt() mit (zum Test festgelegtem) Salt 'SL' zu SLR1U5HLisJLY.
Wie das?
Dasselbe unter PHP wird zu SLTIYxJb5JDu6.
Das stimmt. Macht auch Perl bei mir, genauso wie PHP:
#!/usr/bin/perl -w
print crypt ('miky1', 'SL');
print "\n";
Gibt bei mir auch SLTIYxJb5JDu6. (ohne Punkt versteht sich)
Grüße,
Christian
Hallo Miky,
Willkommen in der Welt der Einweg-Verschlüsselungen! crypt()-Passwörter kannst Du höchstens durch probieren herausbekommen, und das dauert.
Oder gibt´s da ne ganz andere, möglicherweise viel elegantere Methode, die ich noch nich kenne?
Wenn ein Passwort mit crypt() verschlüsselt vorliegt, dann kannst Du das Passwort, das Du vom Benutzer zur Authentifizierung bekommen hast, mit dem gleichen Salt verschlüsseln. Wenn das Ergebnis der Verschlüsselung das gleiche ist, wie das verschlüsselte Passwort, dann hat der Benutzer das Passwort richtig eingeben.
Weiterer Vorschlag: Zur Verschlüsselung würde ich md5() und nicht crypt() verwenden (crypt ist relativ alt), daher wäre folgende Übergangslösung ideal:
Wenn das verschlüsselte Passwort nicht 32 Zeichen hat, dann ist es kein MD5-Hash und daher muss mit crypt überprüft werden.
Wenn das verschlüsselte Passwort genau 32 Zeichen hat, dann ist es ein MD5-Hash und daher muss mit md5 überprüft werden.
Du müsstest halt das verschlüsselte Passwort aus der DB holen und dann erst die Länge prüfen. (oder einen komplizierten Select, je nachdem, was Dir lieber ist)
Bei Ändern des Passworts durch den Benutzer speicherst Du das neue dann per MD5 und so werden alle Passwörter nach und nach mit MD5 verschlüsselt.
Grüße,
Christian
Hallo Miky,
Willkommen in der Welt der Einweg-Verschlüsselungen! crypt()-Passwörter kannst Du höchstens durch probieren herausbekommen, und das dauert.
Ist klar. Ich will ja auch nich wirklich das Passwort wissen, sondern bei Eingabe des Passwortes nur den gleichen Schlüssel mit PHP erzeugen, der auch schon mit Perl erzeugt wurde (konkret: man soll in Zukunft mit PHP-crypt-Passwort an seine alten Daten, gesichert per Perl-crypt-Passwort noch rankommen können)
Oder gibt´s da ne ganz andere, möglicherweise viel elegantere Methode, die ich noch nich kenne?
Wenn ein Passwort mit crypt() verschlüsselt vorliegt, dann kannst Du das Passwort, das Du vom Benutzer zur Authentifizierung bekommen hast, mit dem gleichen Salt verschlüsseln. Wenn das Ergebnis der Verschlüsselung das gleiche ist, wie das verschlüsselte Passwort, dann hat der Benutzer das Passwort richtig eingeben.
Logisch.
Weiterer Vorschlag: Zur Verschlüsselung würde ich md5() und nicht crypt() verwenden (crypt ist relativ alt), daher wäre folgende Übergangslösung ideal:
Wenn das verschlüsselte Passwort nicht 32 Zeichen hat, dann ist es kein MD5-Hash und daher muss mit crypt überprüft werden.
Wenn das verschlüsselte Passwort genau 32 Zeichen hat, dann ist es ein MD5-Hash und daher muss mit md5 überprüft werden.
Du müsstest halt das verschlüsselte Passwort aus der DB holen und dann erst die Länge prüfen. (oder einen komplizierten Select, je nachdem, was Dir lieber ist)
Bei Ändern des Passworts durch den Benutzer speicherst Du das neue dann per MD5 und so werden alle Passwörter nach und nach mit MD5 verschlüsselt.
Jau, MD5 rult, als Übergangslösung sicherlich denkbar...
Grüße,
Christian
Hallo,
Wenn ein Passwort mit crypt() verschlüsselt vorliegt, dann kannst Du das Passwort, das Du vom Benutzer zur Authentifizierung bekommen hast, mit dem gleichen Salt verschlüsseln. Wenn das Ergebnis der Verschlüsselung das gleiche ist, wie das verschlüsselte Passwort, dann hat der Benutzer das Passwort richtig eingeben.
Was ist "Salt"?
Weiterer Vorschlag: Zur Verschlüsselung würde ich md5() und nicht crypt() verwenden (crypt ist relativ alt), daher wäre folgende Übergangslösung ideal:
Was ist denn sicherer, crypt() oder md5()?
Wenn das verschlüsselte Passwort nicht 32 Zeichen hat, dann ist es kein MD5-Hash und daher muss mit crypt überprüft werden.
Wenn das verschlüsselte Passwort genau 32 Zeichen hat, dann ist es ein MD5-Hash und daher muss mit md5 überprüft werden.
LG
Chris
Hallo,
Was ist "Salt"?
Übersetze es: Salz. Das wird sozusagen noch mit in die crypt()-Verschlüsselung reingemischt. Hängt mit dem Algorithmus zusammen.
Was ist denn sicherer, crypt() oder md5()?
Also wenn du mit crypt() den DES-Algorithmus meinst (Crypt kann bei angabe von einem Spezialstring als Salt auch MD5 verschlüsseln) dann würde ich mal sagen MD5. Denn crypt() ist normalerweise auf 8 Zeichen limitiert, md5 beherrscht theoretisch unbegrenzt große Datenmengen. Zu knacken sind sie aber bei gleichem Passwort AFAIK gleich schwer, weil es sowieso nur über Brute Force geht. Aber ich lasse mich da gerne eines besseren belehren, falls ich unrecht habe. ;-)
Grüße,
Christian