Ich hatte erwartet slappasswd
, einen festen Hash zu erzeugen, aber es scheint, dass die Ausgabe zufällig ist, da ich nie dieselbe Ausgabe für dasselbe Eingabekennwort erhalte:
$ slappasswd -s secret
{SSHA}mCXsPZkfgQYZr2mKHpy5Iav+2S2XlVU3
$ slappasswd -s secret
{SSHA}62oXsalJBuopYfHhi6hGp6AESuWNIVnd
$ slappasswd -s secret
{SSHA}0Ulc8+ugMi3NbTtWnclOFW1LKCqRdsT8
Woher weiß slapd während der Authentifizierung, wie der Hash für das angegebene Passwort auf dieselbe Weise randomisiert wird, damit er mit dem ursprünglich definierten Passwort übereinstimmt?
slappasswd
{SSHA} oder die gesalzene Version von SHA-1.{SSHA}
enthält sowohl das Salz als auch den Hash.SSHA ist ein gesalzenes SHA-1. Standardmäßig sind die letzten 4 Bytes das Salz. Die Ausgabe von slappasswd ist
Um zu testen, ob ein Nur-Text-Passwort dem gesalzenen SHA entspricht, müssen Sie:
Die base64-decodierte Zeichenfolge enthält den Hash in binärer Form und kann nicht gedruckt werden. Daher konvertieren wir ihn mit od in hex. Die ersten drei Schritte werden mit dem folgenden Code ausgeführt:
Die Ausgabe könnte sein:
Jetzt müssen wir das Salt mit dem Klartext-Passwort verketten und es hashen, diesmal ohne zu salzen! Das Problem, das ich hatte, war zu verstehen, dass das Salz wirklich jedes Zeichen sein kann, einschließlich nicht druckbarer Zeichen. Um diese nicht druckbaren Zeichen zu verketten, verwenden wir printf und ihre hexadezimalen Darstellungen:
Die Ausgabe ist:
Welches ist gleich dem Hash oben. Jetzt haben wir überprüft, dass 'Passwort' mit dem gesalzenen SHA übereinstimmt.
Vielen Dank und weiterführende Literatur: http://cpansearch.perl.org/src/GSHANK/Crypt-SaltedHash-0.09/lib/Crypt/SaltedHash.pm
quelle