PHP 7.1 Python 2.7.6
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.
.php
password_hash('password', PASSWORD_DEFAULT);
// $2y$10$BN2hH0B3gnZceNlW1JXiNOUN8NWybLlfqZh6WQ/imah4htM8fktFW
password_hash('password', PASSWORD_BCRYPT);
// $2y$10$CuZkO0N29B1YtHHI9mwvIOCSUitQh4ptyfxYWvHhHoHHP2GZqC5Ga
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
/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.
Die Erklärung von Bcrypt war hier leicht zu verstehen. https://goo.gl/kpS5En
Wenn Sie einen anderen Verschlüsselungsalgorithmus verwenden möchten, können Sie "Krypta" verwenden. http://php.net/manual/ja/function.crypt.php
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: **
--Verwenden Sie das bcrypt-Modul, um zu überprüfen, ob das PHP-verschlüsselte Passwort übereinstimmt
bcrypt.checkpw
entspricht password_verify
in PHPDie verschlüsselte Version (ganz links) des Wertes, der mit PHPs "password_hash" generiert wurde, ist "$ 2y
salt = bcrypt.gensalt(rounds=10, prefix=b'2a')
password = b'password'
hashed = bcrypt.hashpw(password, salt)
Präfix
TeilIst 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
Recommended Posts