2017-02-24 15 views

回答

7

generate_password_hash使用SHA-1的不容易,因为它仅用作在PBKDF2哈希的中间,迭代步骤。 See the discussion in chat.

当你像PBKDF2中链接无数散列时,风险与纯粹机会打破强密码的人无法区分。

cryptography-dev邮件列表上进一步讨论后,我们决定改变默认SHA-512为心情舒畅,即使它不影响安全性现在。

你是正确的,与SHA-1使用HMAC时的安全性仍然很好, HMAC-MD5是安全的,甚至无论你相信与否。也就是说,我通常建议人们迁移到HMAC-SHA-256,无论如何, ,以便更容易地分析他们的软件。

你可能要考虑使用SHA512,而不是由于在64位平台上的优化。


generate_password_hash需要method参数来定制如何生成哈希值。默认值是pbkdf2:sha1。为PBKDF2传递一个不同的派生方法。

generate_password_hash(secret, method='pbkdf2:sha512') 

您也可以从1000低改变默认的迭代次数,以更高的数量,以较慢的速度哈希的成本。 pbkdf2:sha1:10000


只要散列和迭代调整的很好,你可能用PBKDF2就可以了。或者,使用Passlib,它支持比Werkzeug更多的散列方法。请参阅Passlib的recommended hashes以讨论要使用的哈希。这个例子展示了如何在Passlib中使用bcrypt。

pip install passlib bcrypt 
from passlib.context import CryptContext 
crypt_context = CryptContext(schemes=['bcrypt_sha256']) 
crypt_context.hash(secret)