首頁  >  問答  >  主體

MYSQL 中的密碼未加密

我目前正在嘗試使用 bcrypt 來加密/散列我的種子密碼並將它們儲存在 MYSQL 中,但它一直給我相同的密碼。我正在使用Python。任何幫助將不勝感激!

用戶.py

from app.db import Base
from sqlalchemy.orm import validates
from sqlalchemy import Column, Integer, String
salt = bcrypt.gensalt()


class User(Base):
  __tablename__ = 'users'
  id = Column(Integer, primary_key=True)
  username = Column(String(50), nullable=False)
  email = Column(String(50), nullable=False, unique=True)
  password = Column(String(200), nullable=False)

  @validates('email')
  def validate_email(self, key, email):
    # make sure email address contains @ character
    assert '@' in email

    return email


@validates('password')
def validate_password(self, key, password):
  assert len(password) > 4

  # encrypt password
  return bcrypt.hashpw(password.encode('utf-8'), salt)

種子.py

from app.models import User
from app.db import Session, Base, engine

# drop and rebuild tables
Base.metadata.drop_all(engine)
Base.metadata.create_all(engine)

db = Session()

# insert users
db.add_all([
  User(username='alesmonde0', email='nwestnedge0@cbc.ca', password='password123'),
  User(username='jwilloughway1', email='rmebes1@sogou.com', password='password123'),
  User(username='iboddam2', email='cstoneman2@last.fm', password='password123'),
  User(username='dstanmer3', email='ihellier3@goo.ne.jp', password='password123'),
  User(username='djiri4', email='gmidgley4@weather.com', password='password123')
])

db.commit()

db.close()

P粉593536104P粉593536104236 天前449

全部回覆(2)我來回復

  • P粉710478990

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

    您每次都會傳遞相同的密碼和鹽:

    >>> salt = bcrypt.gensalt()
    >>> bcrypt.hashpw('password123'.encode('utf-8'), salt)
    b'$2b$12$L14/6UZsC4YymGUiQgBxCO5c6YoHEFDSM9ZSvBW0CgO9YkRUGkXwW'
    >>> bcrypt.hashpw('password123'.encode('utf-8'), salt)
    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
  • 取消回覆