Vérifiez si le hachage de mot de passe généré par PHP correspond en Python

environnement

PHP 7.1 Python 2.7.6

Ce que vous voulez vérifier

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.

Crypter avec PHP

.php


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

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

Commentaire

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

J'ai vérifié le contenu de la constante (bien que ce soit un stub)

/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.

Vérifiez s'il peut être mis en correspondance avec Python

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: **

Commentaire

Mame connaissance (je ne savais tout simplement pas)

La 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 » et « 2b $» puissent être spécifiés en tant que versions chiffrées.

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

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 » et « 2y », elles seront reconnues comme le même mot de passe, donc lorsque vous passerez à Python à l'avenir, vous prendrez la peine de remplacer « 2y » par « 2y $». Aucun traitement tel que le remplacement par $ 2a $ ʻ n'est requis.

Recommended Posts

Vérifiez si le hachage de mot de passe généré par PHP correspond en Python
Vérifiez si l'URL existe en Python
Comment vérifier si le contenu du dictionnaire est le même en Python par valeur de hachage
Vérifiez si les caractères sont similaires en Python
Vérifiez si la chaîne est un nombre en python
[python] Comment vérifier si la clé existe dans le dictionnaire
Vérifiez le comportement du destroyer en Python
Lisez le fichier ligne par ligne avec Python
Lisez le fichier ligne par ligne avec Python
Obtenez le dernier élément du tableau en fractionnant les chaînes en Python et PHP
Vérifiez si la colonne attendue existe dans Pandas DataFrame
Vérifiez s'il s'agit d'Unix dans le langage de script
Décale la chaîne de l'alphabet de N caractères en Python
Comment vérifier en Python si l'un des éléments d'une liste est dans une autre liste
Vérifiez s'il s'agit d'Unix dans le langage de script
Vérifiez la nature atrophique de la distribution de probabilité en Python
[Python] Ouvrez le fichier csv dans le dossier spécifié par pandas
Vérifiez le fonctionnement de Python pour .NET dans chaque environnement
Maîtrisez le type avec Python? (Quand faire la vérification de type)
Visualisez la matrice de corrélation par l'analyse des composants principaux avec Python
Boîte de mot de passe facile en Python
[Python] Vérifiez les bibliothèques installées
Trier par date en python
Je pensais ne pas avoir vu le fichier pyc récemment, mais il a été isolé dans pycache par python3
python Remarque: déterminez si l'argument de ligne de commande est dans la liste
Vérifiez si le fichier de paramètres est lu de manière simple à comprendre
[Compris dans la figure] Gestion de l'environnement virtuel Python par Pipenv
Comment vérifier la taille de la mémoire d'une variable en Python
Supprimer un caractère spécifique en Python s'il s'agit du dernier
Lire la sortie standard d'un sous-processus ligne par ligne en Python
Comment vérifier la taille de la mémoire d'un dictionnaire en Python
Trier les noms de fichiers obtenus par Python glob dans l'ordre numérique
Vérifiez le résultat du dessin à l'aide de Plotly en incorporant CodePen dans Qiita
Vérifiez si vous pouvez vous connecter à un port TCP en Python
Assurez-vous que python peut convertir / convertir une chaîne de caractères en int
[Golang] Vérifiez si une chaîne de caractères spécifique est incluse dans la chaîne de caractères
Jouez en accédant à l'API Riot Games en Python Première moitié
Je souhaite recevoir le fichier de configuration et vérifier si le fichier JSON généré par jinja2 est un JSON valide
Comment vérifier automatiquement si le code que vous avez écrit dans Google Colaboratory correspond à la norme de codage python "pep8"
Rechercher les fuites de mémoire dans Python
[Python] Vérifiez le répertoire actuel, déplacez le répertoire
Obtenir l'API arXiv en Python
Rechercher des commandes externes avec python
Python dans le navigateur: la recommandation de Brython
Enregistrez le fichier binaire en Python
Obtenez le chemin du bureau en Python
Obtenez le chemin du script en Python
Dans la commande python, python pointe vers python3.8
Implémenter le modèle Singleton en Python
Vérifiez et déplacez le répertoire en Python
Accédez à l'API Web en Python
Méthode Hash (méthode d'adresse ouverte) en Python
Vérifiez le résumé des données dans CASTable
J'ai écrit la file d'attente en Python
Calculer le mois précédent en Python
Examiner la classe d'un objet avec python
Obtenez le chemin du bureau en Python
Générer un mot de passe pour le manuel avec python