Kata laluan dalam MYSQL tidak disulitkan
P粉593536104
P粉593536104 2024-03-19 21:43:49
0
2
496

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

membalas semua(2)
P粉710478990

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

Andaian:

  • Anda telah menyalin kod yang sama seperti dalam fail asal
  • Dan "terus berikan saya kata laluan yang sama" bermakna apa yang disimpan dalam pangkalan data ialah kata laluan teks terbuka, bukan cincang daripada pengesah

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.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan