>  Q&A  >  본문

MYSQL의 비밀번호는 암호화되지 않습니다.

현재 bcrypt를 사용하여 시드 비밀번호를 암호화/해시하고 MYSQL에 저장하려고 하는데 계속 동일한 비밀번호가 제공됩니다. 저는 파이썬을 사용하고 있습니다. 어떤 도움이라도 대단히 감사하겠습니다!

user.py

으아아아

seed.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)

P粉593536104P粉593536104213일 전421

모든 응답(2)나는 대답할 것이다

  • P粉710478990

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

    매번 동일한 비밀번호와 솔트를 전달합니다:

    으아아아

    동일한 일반 텍스트를 사용하여 bcrypt다른 해시를 생성하려면 해시를 생성할 때마다 솔트를 재생성하십시오(가장 좋은 방법은 다음과 같습니다).

    으아아아

    회신하다
    0
  • P粉807239416

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

    가정:

    • 원본 파일과 똑같은 코드를 복사하셨습니다
    • 그리고 "같은 비밀번호를 계속 제공하세요"는 데이터베이스에 저장된 내용이 검증기의 해시가 아닌 공개 텍스트 비밀번호라는 것을 의미합니다

    위의 내용이 모두 정확하다면 인증에 문제가 있는 것입니다. 즉, "validate_password" 메서드가 User 클래스에 전혀 없습니다. 올바르게 식별하려고 하면 비밀번호가 트리거되고 해시됩니다.

    회신하다
    0
  • 취소회신하다