我正在编写一个使用 Werkzeug 哈希函数 的 Python 应用程序。下面是一个示例User
模型:
class User(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(64), unique=True, index=True)
role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))
password_hash = db.Column(db.String(128))
# Custom property getter
@property
def password(self):
raise AttributeError('password is not a readable attribute')
# Custom property setter
@password.setter
def password(self, password):
self.password_hash = generate_password_hash(password)
def verify_password(self, password):
return check_password_hash(self.password_hash, password)
def __repr__(self):
return '<User %r>' % self.username
我发现现在数据库中存储的
密码
已经以哈希方式存储,任何看到哈希值的攻击者都不能在解密之前知道密码。但是,werkzeug哈希函数对于许多应用程序来说是否是一个相当明显的选择呢?攻击者能否使用check_password_hash
函数并解密密码呢?
check_password_hash
并不是解密密码的功能;我想它是将提供的密码进行哈希处理,并将其与存储的哈希值进行比较(即大致相当于return self.password_hash == generate_password_hash(password)
)。哈希加盐的目的在于,它是不可逆的;这是哈希,而不是加密。 - jonrsharpe