Les mots de passe dans MYSQL ne sont pas cryptés
P粉593536104
P粉593536104 2024-03-19 21:43:49
0
2
467

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

répondre à tous(2)
P粉710478990

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粉807239416

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.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal