Rumah > Soal Jawab > teks badan
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()
P粉7104789902024-03-20 16:34:19
Anda lulus kata laluan dan garam yang sama setiap kali:
>>> 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'
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):
>>> 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
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.