Maison > Questions et réponses > le corps du texte
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粉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'
P粉8072394162024-03-20 14:47:25
Hypothèse :
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.