MYSQL のパスワードは暗号化されません
P粉593536104
P粉593536104 2024-03-19 21:43:49
0
2
495

現在、bcrypt を使用してシード パスワードを暗号化/ハッシュし、MYSQL に保存しようとしていますが、同じパスワードが与えられ続けます。 Pythonを使用しています。助けていただければ幸いです。

user.py

app.dbインポートベースから
sqlalchemy.orm からのインポートの検証
from sqlalchemy import 列、整数、文字列
ソルト = bcrypt.gensalt()


クラス ユーザー(ベース):
  __テーブル名__ = 'ユーザー'
  id = 列(整数、primary_key=True)
  ユーザー名 = 列(文字列(50)、nullable=False)
  email = Column(String(50)、nullable=False、unique=True)
  パスワード = 列(文字列(200)、nullable=False)

  @validates('メール')
  def validate_email(自己、キー、電子メール):
    # メールアドレスに@文字が含まれていることを確認してください
    電子メールで「@」をアサートする

    返信メール


@validates('パスワード')
def validate_password(自分自身、キー、パスワード):
  アサート len(パスワード) > 4

  # パスワードを暗号化する
  return bcrypt.hashpw(password.encode('utf-8'), Salt)

seed.py

from app.models import ユーザー
app.db からインポート セッション、ベース、エンジン

# テーブルを削除して再構築する
Base.metadata.drop_all(エンジン)
Base.metadata.create_all(エンジン)

db = セッション()

# ユーザーを挿入
db.add_all([
  ユーザー(ユーザー名='alesmonde0'、メール='nwestnedge0@cbc.ca'、パスワード='password123')、
  ユーザー(ユーザー名='jwilloughway1'、メール='rmebes1@sogou.com'、パスワード='password123')、
  ユーザー(ユーザー名='iboddam2'、メール='cstoneman2@last.fm'、パスワード='password123')、
  ユーザー(ユーザー名='dstanmer3'、メール='ihellier3@goo.ne.jp'、パスワード='password123')、
  ユーザー(ユーザー名='dwari4'、メール='gmidgley4@weather.com'、パスワード='password123')
])

db.commit()

db.close()

P粉593536104
P粉593536104

全員に返信(2)
P粉710478990

毎回同じパスワードとソルトを渡します:

#>>>> ソルト = bcrypt.gensalt() >>> bcrypt.hashpw('password123'.encode('utf-8'), ソルト) b'$2b$12$L14/6UZsC4YymGUiQgBxCO5c6YoHEFDSM9ZSvBW0CgO9YkRUGkXwW' >>> bcrypt.hashpw('password123'.encode('utf-8'), ソルト) b'$2b$12$L14/6UZsC4YymGUiQgBxCO5c6YoHEFDSM9ZSvBW0CgO9YkRUGkXwW'
 

bcrypt を使用して同じプレーンテキストで異なるハッシュを生成したい場合は、ハッシュを生成するたびにソルトを再生成します (ベスト プラクティスとして、これを行う必要があります): #>>>> bcrypt.hashpw('password123'.encode('utf-8'), bcrypt.gensalt()) b'$2b$12$e1.vrDabeTDcqjqJ3Wj1fuapoGBgRaTjYNEn.v1WvuBbQLIsNlS3O' >>> bcrypt.hashpw('password123'.encode('utf-8'), bcrypt.gensalt()) b'$2b$12$jqE4jMUeGfTLYixrR5iB0OAWSM/ZIEPiscX5fPLcxn8rOHqzJOUt6'

いいねを押す +0
P粉807239416

###予測:###

元のファイルとまったく同じコードをコピーしました
  • そして、「同じパスワードを与え続ける」ということは、データベースに保存されるのは、バリデーターからのハッシュではなく、オープンテキストのパスワードであることを意味します
  • 上記がすべて正しい場合、問題は認証にあります。つまり、「validate_password」メソッドが User クラスにまったくありません。 正しく識別しようとすると、パスワードがトリガーされてハッシュ化されるはずです。
いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート