Flaskプロジェクト1の実際の戦闘:2.4ユーザーパスワード処理(改善予定)

ここに画像の説明を挿入

(先生の生放送の内容によると)

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)

おすすめ

転載: blog.csdn.net/laoluobo76/article/details/110441168