Maison  >  Questions et réponses  >  le corps du texte

Les mots de passe dans MYSQL ne sont pas cryptés

J'essaie actuellement d'utiliser bcrypt pour crypter/hacher mes mots de passe de départ et les stocker dans MYSQL, mais il continue de me donner le même mot de passe. J'utilise Python. Toute aide serait grandement appréciée !

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

seed.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粉593536104213 Il y a quelques jours420

répondre à tous(2)je répondrai

  • P粉710478990

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

    Vous passez le même mot de passe et sel à chaque fois :

    >>> salt = bcrypt.gensalt()
    >>> bcrypt.hashpw('password123'.encode('utf-8'), salt)
    b'b$L14/6UZsC4YymGUiQgBxCO5c6YoHEFDSM9ZSvBW0CgO9YkRUGkXwW'
    >>> bcrypt.hashpw('password123'.encode('utf-8'), salt)
    b'b$L14/6UZsC4YymGUiQgBxCO5c6YoHEFDSM9ZSvBW0CgO9YkRUGkXwW'

    Si vous souhaitez produire différents hachages en utilisant bcrypt le même texte en clair, régénérez le sel à chaque fois que vous générez un hachage (comme meilleure pratique, vous devriez le faire) :

    >>> bcrypt.hashpw('password123'.encode('utf-8'), bcrypt.gensalt())
    b'b$e1.vrDabeTDcqjqJ3Wj1fuapoGBgRaTjYNEn.v1WvuBbQLIsNlS3O'
    >>> bcrypt.hashpw('password123'.encode('utf-8'), bcrypt.gensalt())
    b'b$jqE4jMUeGfTLYixrR5iB0OAWSM/ZIEPiscX5fPLcxn8rOHqzJOUt6'

    répondre
    0
  • P粉807239416

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

    Hypothèse :

    • Vous avez copié exactement le même code que dans le fichier original
    • Et "continuez à me donner le même mot de passe" signifie que ce qui est enregistré dans la base de données est le mot de passe en texte ouvert, pas le hachage du validateur

    Si tout ce qui précède est correct, le problème vient de l'authentification, c'est-à-dire que la méthode "validate_password" n'est pas du tout dans la classe User. Essayez de l'identifier correctement et il devrait déclencher et hacher le mot de passe.

    répondre
    0
  • Annulerrépondre