1.パスワード暗号化の概要
- ユーザーパスワードはプレーンテキストでデータベースに保存できません。暗号化して暗号文で保存する必要があります
- パスワードがプレーンテキストでデータベースに保存されている場合、データベースが侵害されると、ユーザー情報が削除されるだけでなく、ユーザーパスワードが直接公開されます。
- パスワードが暗号テキストでデータベースに保存されている場合、データベースが侵害されると、ユーザー情報も削除されますが、ユーザーパスワードを直接知ることはできず、ログに記録するためにパスワードを解読するために一定の時間を費やす必要はありません。ユーザーアカウントに
- 不可逆的な暗号化アルゴリズムであるMD5は、過去により多く使用されていました。MD5暗号化には、パスワードが暗号化された後に暗号文が修正されるという機能があります。一般的に使用されるパスワードのMD5暗号化暗号文をデータベースに保存すると、パスワードが比較的公開されているのと同じであるため、MD5暗号化が解読されることはありません。変装してひびが入っています。
- 現在、一般的にMD5暗号化は直接使用されていませんが、MD5 +ソルト(ソルト)が使用されています。これはMD5 +ランダム文字列と同等であり、クラッキングの難易度が高く、特に安全ではありません。
- 現在は一般的にsha1sha256を使用します。これは、MD5とsaltの両方を節約することと同等であり、クラックするのはより困難です。
- パスワード暗号化アルゴリズムは通常、ユーザーモデルで記述されます
第二に、パスワード暗号化の実装
- ここでは、flaskが提供するパスワード暗号化アルゴリズムwerkzeug.security.generate_password_hashとcheck_password_hashが使用されます。
1.ユーザークラスを変更し、パスワード暗号化方式を追加します
- パスワードのプレーンテキストを暗号化した後、クラスの属性password_hashを直接変更します
def passwd_hash(self,origin_password):
'''对密码进行加密'''
self.password_hash=generate_password_hash(origin_password)
2.電話する
- ユーザークラスのメソッドを直接呼び出す
user.passwd_hash(password)
3.デコレータを使用して最適化する
3.1パスワード暗号化方式の最適化
- デコレータを使用して暗号化アルゴリズムを最適化する
@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通話の最適化
user.password = password
第三に、パスワード検証の実装
- フラスコが提供するパスワード暗号化アルゴリズムcheck_password_hashメソッドを使用して、パスワード検証を実行します
1.ユーザークラスを変更し、パスワード暗号化方式を追加します
# loghome/models.py
def check_pwd_hash(self, password):
"""验证密码的正确性"""
# check_password_hash(密文, 明文)
return check_password_hash(self.password_hash, password)
2.メソッドを呼び出す
user.check_pwd_hash(password)