1. Introduction au cryptage des mots de passe
- Le mot de passe utilisateur ne peut pas être stocké dans la base de données en texte brut, il doit être crypté et stocké en texte chiffré
- Si le mot de passe est stocké dans la base de données en texte brut, une fois que la base de données est violée, non seulement les informations utilisateur sont supprimées, mais le mot de passe utilisateur est directement exposé.
- Si le mot de passe est stocké dans la base de données en texte chiffré, une fois que la base de données est compromise, bien que les informations utilisateur soient également supprimées, le mot de passe utilisateur ne peut pas être directement connu et il n'est pas nécessaire de passer un certain temps à déchiffrer le mot de passe pour se connecter dans le compte utilisateur
- MD5, un algorithme de cryptage irréversible, a été davantage utilisé dans le passé. Le chiffrement MD5 a une caractéristique: le texte chiffré est corrigé après le chiffrement du mot de passe. Si quelqu'un enregistre le texte chiffré MD5 du mot de passe couramment utilisé dans la base de données, cela équivaut à ce que le mot de passe soit relativement public, de sorte que le chiffrement MD5 n'est pas fissuré, il est fêlé déguisé.
- Maintenant, généralement, le cryptage MD5 n'est pas utilisé directement, mais le sel MD5 + (sel) est utilisé, ce qui équivaut à une chaîne aléatoire MD5 +, ce qui augmente la difficulté de craquage et n'est pas particulièrement sûr.
- Maintenant, utilisez généralement sha1 sha256, ce qui équivaut à économiser à la fois MD5 et sel, et il est plus difficile de craquer
- Les algorithmes de cryptage des mots de passe sont généralement écrits dans le modèle utilisateur
Deuxièmement, la mise en œuvre du cryptage des mots de passe
- Les algorithmes de cryptage de mot de passe werkzeug.security.generate_password_hash et check_password_hash fournis par flask sont utilisés ici
1. Modifiez la classe d'utilisateurs et ajoutez une méthode de cryptage de mot de passe
- Après avoir chiffré le texte brut du mot de passe, modifiez directement l'attribut password_hash de la classe
def passwd_hash(self,origin_password):
'''对密码进行加密'''
self.password_hash=generate_password_hash(origin_password)
2. Appeler
- Appelez directement la méthode de la classe utilisateur
user.passwd_hash(password)
3. Utilisez des décorateurs pour optimiser
3.1 Optimisation de la méthode de cryptage des mots de passe
- Utilisez des décorateurs pour optimiser les algorithmes cryptographiques
@property
def password(self):
"""读取属性的方法"""
# return self.password_hash # 该属性不应调用,调用抛出异常
raise AttributeError('这个属性只能设置,不能读取')
@password.setter
def password(self, value):
"""设置属性"""
# 调用方法 user.password = password
self.password_hash = generate_password_hash(value)
3.2 Optimisation des appels
user.password = password
Troisièmement, la mise en œuvre de la vérification des mots de passe
- Utilisez la méthode check_password_hash de l'algorithme de chiffrement de mot de passe fournie par flask pour effectuer la vérification du mot de passe
1. Modifiez la classe d'utilisateurs et ajoutez une méthode de cryptage de mot de passe
# loghome/models.py
def check_pwd_hash(self, password):
"""验证密码的正确性"""
# check_password_hash(密文, 明文)
return check_password_hash(self.password_hash, password)
2. Méthode d'appel
user.check_pwd_hash(password)