【问题标题】:hash string size哈希字符串大小
【发布时间】:2012-04-15 23:19:11
【问题描述】:

在 python 中,我使用以下代码为用户密码创建哈希:

self.password = hmac.new(security_key, raw_password, sha1).hexdigest()

现在我想将此值保存到数据库中。我的数据库列必须是什么大小? 它似乎与 digest_size 属性有关,但不知道什么对象或类具有这样的属性。 sha1 没有。

【问题讨论】:

  • SHA-1 不是密码哈希的最佳选择。它非常快,并且被认为很弱(如果尚未损坏)。最佳实践类似于 bcrypt,但如果你想坚持 Python 标准库,那么 sha256sha1 更好。

标签: python hmac sha


【解决方案1】:

hmac 的输出取决于它使用的散列算法。在您的情况下,它使用 sha1,它始终根据 RFC2104 输出 20 字节长的字节字符串。调用 hexdigest() 将字节字符串转换为可打印的十六进制格式。 1 个字节 = 2 个十六进制数字,所以总共是 40 个十六进制字符。您可以安全地将数据库列设置为 char(40)。

【讨论】:

    【解决方案2】:

    sha-1 哈希函数的输出长度为 20 个字符。 (根据RFC2104hmac python module docs 引用:“...L 哈希输出的字节长度(L=16 用于 MD5,L=20 用于 SHA-1)。”)

    您也可以通过以下方式验证:

    import hashlib;
    H = hashlib.sha1("blahblah");
    print(H.digest_size);
    

    【讨论】:

      猜你喜欢
      • 2016-12-28
      • 2012-05-14
      • 1970-01-01
      • 1970-01-01
      • 2019-10-07
      • 2019-04-15
      • 2013-01-20
      • 2011-08-18
      • 1970-01-01
      相关资源
      最近更新 更多