PHP 7.1 Python 2.7.6
Je développe actuellement en PHP et j'utilise password_hash
pour crypter mon mot de passe.
Il y a longtemps, je me demande si les mots de passe chiffrés peuvent être utilisés de la même manière lors de la migration vers un autre langage (Python dans ce cas) à l'avenir: question:
En d'autres termes, je veux m'assurer que le mot de passe de l'utilisateur peut être vérifié normalement et que je peux me connecter même après la migration vers Python.
Pour le dire un peu plus microscopiquement, password_hash
utilise un algorithme de cryptage appelé Blowfish (voir ci-dessous), donc j'aimerais voir si Blowfish peut également être utilisé en Python pour la correspondance.
.php
password_hash('password', PASSWORD_DEFAULT);
// $2y$10$BN2hH0B3gnZceNlW1JXiNOUN8NWybLlfqZh6WQ/imah4htM8fktFW
password_hash('password', PASSWORD_BCRYPT);
// $2y$10$CuZkO0N29B1YtHHI9mwvIOCSUitQh4ptyfxYWvHhHoHHP2GZqC5Ga
password_hash
vous permet actuellement de spécifier deux types de constantes: PASSWORD_DEFAULT et 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);
** Après tout, PASSWORD_DEFAULT et PASSWORD_BCRYPT pointent vers la même valeur. ** **
Dans ce cas, il sera implémenté dans Bcrypt.
Depuis Bcrypt ≒ Blowfish, l'algorithme de cryptage actuel pour password_hash
sera toujours Blowfish.
L'explication de Bcrypt était facile à comprendre ici. https://goo.gl/kpS5En
Si vous souhaitez utiliser un autre algorithme de cryptage, vous pouvez utiliser Crypt
.
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!
** Correspondance avec succès: ok_woman_tone1: **
bcrypt.checkpw
correspond à password_verify
en PHPLa version chiffrée (partie la plus à gauche) de la valeur générée à l'aide de PHP password_hash
est $ 2y $
.
Cependant, lorsqu'il est généré à l'aide du module bcrypt de Python, il semble que seuls «$ 2a
salt = bcrypt.gensalt(rounds=10, prefix=b'2a')
password = b'password'
hashed = bcrypt.hashpw(password, salt)
Prefix
N'est-ce pas le même mot de passe? J'ai pensé: rolling_eyes: mais cela correspondait comme mentionné ci-dessus.
Au contraire, même si la valeur générée par bcrypt.hashpw
correspondait à password_verify
, elle correspondait avec succès.
En d'autres termes, même si les versions chiffrées sont différentes, telles que «$ 2a
Recommended Posts