没有SHA-1的werkzeug.security generate_password_hash替代方案

时间:2017-02-24 17:56:24

标签: python flask sha1 werkzeug

我使用generate_password_hash中的werkzeug.security对我的密码进行哈希处理。我最近看到了this article about SHA-1 collisionswerkzeug.security使用SHA-1,因为它不再安全,我想要一个替代方案。如何在不依赖SHA-1的情况下散列我的密码?

from werkzeug.security import generate_password_hash
generate_password_hash(secret)

1 个答案:

答案 0 :(得分:16)

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)