ホームページ  >  に質問  >  本文

MYSQL のパスワードは暗号化されません

現在、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粉593536104P粉593536104236日前448

全員に返信(2)返信します

  • P粉710478990

    P粉7104789902024-03-20 16:34:19

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

    #>>>> ソルト = 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

    P粉8072394162024-03-20 14:47:25

    ###予測:###

    元のファイルとまったく同じコードをコピーしました
    • そして、「同じパスワードを与え続ける」ということは、データベースに保存されるのは、バリデーターからのハッシュではなく、オープンテキストのパスワードであることを意味します
    • 上記がすべて正しい場合、問題は認証にあります。つまり、「validate_password」メソッドが User クラスにまったくありません。 正しく識別しようとすると、パスワードがトリガーされてハッシュ化されるはずです。

    返事
    0
  • キャンセル返事