【问题标题】:werkzeug.security generate_password_hash alternative without SHA-1werkzeug.security generate_password_hash 没有 SHA-1 的替代方案
【发布时间】:2017-07-15 16:14:45
【问题描述】:

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

from werkzeug.security import generate_password_hash
generate_password_hash(secret)

【问题讨论】:

    标签: python flask sha1 werkzeug


    【解决方案1】:

    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)
    

    【讨论】:

      猜你喜欢
      • 2010-09-07
      • 2013-06-13
      • 1970-01-01
      • 1970-01-01
      • 2011-01-09
      • 2011-04-05
      • 1970-01-01
      • 1970-01-01
      • 2013-10-14
      相关资源
      最近更新 更多