在generate_password_hash 中使用 SHA-1 并不容易受到攻击,因为它仅用作 PBKDF2 哈希中的中间迭代步骤。 See the discussion in chat.
当您像在 PBKDF2 中那样链接数以亿计的哈希值时,风险与纯粹偶然破解强密码的人无法区分。
cryptography-dev 邮件列表上有进一步的讨论。
你说得对,当与 SHA-1 一起使用时,HMAC 的安全性仍然很好,
不管你信不信,HMAC-MD5 甚至是安全的。
generate_password_hash 采用method 参数来自定义哈希的生成方式。默认为pbkdf2:sha1。为 PBKDF2 传递不同的推导方法。
generate_password_hash(secret, method='pbkdf2:sha512')
您还可以将迭代次数从默认的 150,000 更改为更高的数字,但会降低哈希速度。 pbkdf2:sha1:200000.
您可能对 PBKDF2 没问题,只要对哈希和迭代进行了很好的调整。或者,使用Passlib,它支持比 Werkzeug 更多的哈希方法。请参阅 Passlib 的 recommended hashes 以讨论要使用哪些哈希。这个例子展示了如何将 bcrypt 与 Passlib 一起使用。
pip install passlib bcrypt
from passlib.context import CryptContext
crypt_context = CryptContext(schemes=['bcrypt_sha256'])
crypt_context.hash(secret)