Überprüfen Sie, ob der von PHP generierte Passwort-Hash in Python übereinstimmt

Umgebung

PHP 7.1 Python 2.7.6

Was Sie überprüfen möchten

Ich entwickle gerade in PHP und verwende password_hash, um mein Passwort zu verschlüsseln. Vor langer Zeit habe ich mich gefragt, ob verschlüsselte Passwörter bei der Migration in eine andere Sprache (in diesem Fall Python) in Zukunft auf die gleiche Weise verwendet werden können: Frage: Mit anderen Worten, ich möchte sicherstellen, dass das Kennwort des Benutzers normal überprüft werden kann und ich mich auch nach der Migration zu Python anmelden kann. Um es etwas mikroskopischer auszudrücken, password_hash verwendet einen Verschlüsselungsalgorithmus namens Blowfish (siehe unten), daher würde ich gerne sehen, ob Blowfish auch in Python zum Abgleichen verwendet werden kann.

Mit PHP verschlüsseln

.php


password_hash('password', PASSWORD_DEFAULT);
// $2y$10$BN2hH0B3gnZceNlW1JXiNOUN8NWybLlfqZh6WQ/imah4htM8fktFW

password_hash('password', PASSWORD_BCRYPT);
// $2y$10$CuZkO0N29B1YtHHI9mwvIOCSUitQh4ptyfxYWvHhHoHHP2GZqC5Ga

Kommentar

Mit password_hash können Sie derzeit zwei Arten von Konstanten angeben: PASSWORD_DEFAULT und PASSWORD_BCRYPT. http://php.net/manual/ja/function.password-hash.php

Ich habe den Inhalt der Konstante überprüft (obwohl es sich um einen Stub handelt).

/php/lib/php.jar!/stubs/standard/password.php


define("PASSWORD_DEFAULT", 1);
define("PASSWORD_BCRYPT", 1);

** Immerhin zeigen sowohl PASSWORD_DEFAULT als auch PASSWORD_BCRYPT auf denselben Wert. ** **. In diesem Fall wird es in Bcrypt implementiert. Seit Bcrypt ≒ Blowfish ist der aktuelle Verschlüsselungsalgorithmus für password_hash immer Blowfish.

Überprüfen Sie, ob es mit Python übereinstimmen kann

import bcrypt

password = b'password'
phpHash = '$2y$10$BN2hH0B3gnZceNlW1JXiNOUN8NWybLlfqZh6WQ/imah4htM8fktFW'

if bcrypt.checkpw(password, phpHash):
    print("It Matches!")
else:
    print("It Does not Match :(")

# It Matches!

** Erfolgreich abgeglichen: ok_woman_tone1: **

Kommentar

--Verwenden Sie das bcrypt-Modul, um zu überprüfen, ob das PHP-verschlüsselte Passwort übereinstimmt

Mame Wissen (ich wusste es einfach nicht)

Die verschlüsselte Version (ganz links) des Wertes, der mit PHPs "password_hash" generiert wurde, ist "$ 2y ". Bei der Generierung mit dem bcrypt-Modul von Python scheinen jedoch nur " 2a " und " 2b $" als verschlüsselte Versionen angegeben werden zu können.

salt = bcrypt.gensalt(rounds=10, prefix=b'2a')
password = b'password'
hashed = bcrypt.hashpw(password, salt)

Ist das nicht das gleiche Passwort? Ich dachte: rollende Augen: aber es stimmte wie oben erwähnt überein. Im Gegenteil, selbst wenn der von bcrypt.hashpw generierte Wert mit password_verify übereinstimmte, stimmte er erfolgreich überein. Mit anderen Worten, selbst wenn die verschlüsselten Versionen unterschiedlich sind, z. B. "$ 2a " und " 2y ", werden sie als dasselbe Kennwort erkannt. Wenn Sie also in Zukunft zu Python wechseln, müssen Sie " 2y " durch " 2y $" ersetzen. Es ist keine Verarbeitung wie das Ersetzen durch $ 2a $ `erforderlich.

Recommended Posts

Überprüfen Sie, ob der von PHP generierte Passwort-Hash in Python übereinstimmt
Überprüfen Sie, ob die URL in Python vorhanden ist
So überprüfen Sie anhand des Hashwerts, ob der Inhalt des Wörterbuchs in Python identisch ist
Überprüfen Sie, ob die Zeichen in Python ähnlich sind
Überprüfen Sie, ob die Zeichenfolge eine Zahl in Python ist
[Python] So überprüfen Sie, ob der Schlüssel im Wörterbuch vorhanden ist
Überprüfen Sie das Verhalten des Zerstörers in Python
Lesen Sie die Datei Zeile für Zeile mit Python
Lesen Sie die Datei Zeile für Zeile mit Python
Holen Sie sich das letzte Element des Arrays, indem Sie Zeichenfolgen in Python und PHP aufteilen
Überprüfen Sie, ob die erwartete Spalte in Pandas DataFrame vorhanden ist
Überprüfen Sie, ob es sich um Unix in der Skriptsprache handelt
Verschieben Sie die Alphabetzeichenfolge in Python um N Zeichen
So überprüfen Sie in Python, ob sich eines der Elemente einer Liste in einer anderen Liste befindet
Überprüfen Sie die atrophische Natur der Wahrscheinlichkeitsverteilung in Python
[Python] Öffnen Sie die CSV-Datei in dem von Pandas angegebenen Ordner
Überprüfen Sie die Funktionsweise von Python für .NET in jeder Umgebung
Den Typ mit Python beherrschen? (Wann ist eine Typprüfung durchzuführen?)
Visualisieren Sie die Korrelationsmatrix durch Hauptkomponentenanalyse mit Python
Einfaches Passwortfeld in Python
[Python] Überprüfen Sie die installierten Bibliotheken
Sortieren nach Datum in Python
Ich dachte, ich hätte die pyc-Datei kürzlich nicht gesehen, aber sie wurde von python3 in pycache isoliert
Python Hinweis: Stellen Sie fest, ob das Befehlszeilenargument in der Liste enthalten ist
Überprüfen Sie, ob die Einstellungsdatei leicht verständlich gelesen wird
[In der Abbildung verstanden] Verwaltung der virtuellen Python-Umgebung durch Pipenv
So überprüfen Sie die Speichergröße einer Variablen in Python
Löschen Sie ein bestimmtes Zeichen in Python, wenn es das letzte ist
Lesen Sie die Standardausgabe eines Unterprozesses zeilenweise in Python
So überprüfen Sie die Speichergröße eines Wörterbuchs in Python
Sortieren Sie die von Python glob erhaltenen Dateinamen in numerischer Reihenfolge
Überprüfen Sie das Zeichnungsergebnis mit Plotly, indem Sie CodePen in Qiita einbetten
Überprüfen Sie, ob Sie in Python eine Verbindung zu einem TCP-Port herstellen können
Stellen Sie sicher, dass Python eine Zeichenfolge in int konvertieren / konvertieren kann
[Golang] Überprüfen Sie, ob eine bestimmte Zeichenfolge in der Zeichenfolge enthalten ist
Spielen Sie, indem Sie die Riot Games-API in Python First Half drücken
Ich möchte die Einstellungsdatei erhalten und prüfen, ob die von jinja2 generierte JSON-Datei eine gültige JSON ist
So überprüfen Sie automatisch, ob der in Google Colaboratory geschriebene Code dem Python-Codierungsstandard "pep8" entspricht.
Überprüfen Sie Python auf Speicherlecks
[Python] Überprüfen Sie das aktuelle Verzeichnis und verschieben Sie das Verzeichnis
Abrufen der arXiv-API in Python
Suchen Sie mit Python nach externen Befehlen
Python im Browser: Brythons Empfehlung
Speichern Sie die Binärdatei in Python
Holen Sie sich den Desktop-Pfad in Python
Holen Sie sich den Skriptpfad in Python
Im Python-Befehl zeigt Python auf Python3.8
Implementieren Sie das Singleton-Muster in Python
Überprüfen und verschieben Sie das Verzeichnis in Python
Klicken Sie auf die Web-API in Python
Hash-Methode (Open-Address-Methode) in Python
Überprüfen Sie die Datenzusammenfassung in CASTable
Ich habe die Warteschlange in Python geschrieben
Berechnen Sie den Vormonat in Python
Untersuchen Sie die Klasse eines Objekts mit Python
Holen Sie sich den Desktop-Pfad in Python
Passwort für Lehrbuch mit Python generieren