Saya sedang cuba menggunakan bcrypt untuk menyulitkan/mencincang kata laluan benih saya dan menyimpannya dalam MYSQL, tetapi ia terus memberi saya kata laluan yang sama. Saya menggunakan Python. Sebarang bantuan akan sangat dihargai!
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()
Anda lulus kata laluan dan garam yang sama setiap kali:
Jika anda ingin menghasilkan cincang yang berbeza menggunakan
bcrypt
teks biasa yang sama, jana semula garam setiap kali anda menjana cincang (sebagai amalan terbaik, anda harus melakukan ini):Andaian:
Jika semua di atas adalah betul, masalahnya adalah dengan pengesahan, iaitu kaedah "validate_password" tiada dalam kelas Pengguna sama sekali. Cuba kenal pasti dengan betul dan ia harus mencetuskan dan mencincang kata laluan.