MYSQL의 비밀번호는 암호화되지 않습니다.
P粉593536104
P粉593536104 2024-03-19 21:43:49
0
2
465

현재 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粉593536104
P粉593536104

모든 응답(2)
P粉710478990

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

으아아아

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

으아아아
P粉807239416

가정:

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

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

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿