【问题标题】:Bcrypt hash is same for different stringsBcrypt 哈希对于不同的字符串是相同的
【发布时间】:2020-05-13 00:27:29
【问题描述】:

我正在尝试使用 bcrypt(在 python 中)为 2 个更长的不同字符串创建哈希

这适用于较短的字符串(如"a""b"),但是当我使用相同开头的长字符串时,它会返回相同的哈希值。

我应该提一下,两个字符串的盐值保持不变。

import bcrypt

hash_msg1 = b"1 b'$2b$12$kknL1S6HaV1/DyNiHhV/ue9SPIOAx.qY2iE33QS8.pi8jM0gvZ53a' {'him': -120, 'me': 100}"
hash_msg2 = b"1 b'$2b$12$kknL1S6HaV1/DyNiHhV/ue9SPIOAx.qY2iE33QS8.pi8jM0gvZ53a' {'him': -1, 'me': 1}"

salt = bcrypt.gensalt()

hash1 = bcrypt.hashpw(hash_msg1, salt)
hash2 = bcrypt.hashpw(hash_msg2, salt)

if hash1 == hash2:
    print('Hash is the same')
else:
    print('It works')

这会打印“哈希相同”

我尝试使用另一个名为 rsa 的库,您可以在其中使用 rsa.compute_hash(message, 'SHA-256')。 我用这 2 条消息尝试过,它有效,但我想知道如何使用 bcrypt 来做到这一点。

(虽然我还应该提到 rsa 库中的哈希不使用任何盐,但我可以简单地将盐作为字符串添加到主字符串的末尾)

似乎有最大字符数限制,但我想知道我怎样才能让它工作。

【问题讨论】:

  • the recommended workaround 不起作用吗?
  • @HeapOverflow 确实如此,我没注意到GitHub上有发布的解决方法,谢谢。

标签: python hash bcrypt


【解决方案1】:

来自文档:

bcrypt 算法只处理最多 72 个字符的密码

https://pypi.org/project/bcrypt/

因此,您的文档以相同的字符序列开头意味着您将获得相同的哈希值。

上面刚刚出现了一条评论,链接到相同的内容。该文档还包含一个解决方法。但是,该解决方法确实涉及使用另一个库(例如 RSA)进行预散列,因此您是否需要 bcrypt 将取决于您的用例。

【讨论】:

  • bcrypt 的重点是非常慢。仅使用快速哈希将忽略这一点。见第二段here
  • @SimonN 我正在尝试创建一个区块链,字符串的内容是索引、先前的哈希和交易列表(我将使用它来证明工作,但尚未实现),我应该使用 bcrypt 库吗?
  • 对不起,我不是区块链或加密方面的专家。 @HeapOverflow 上面提出的观点表明,也许 bcrypt 可能更适合其他用例,但我只是在推测。
猜你喜欢
  • 2021-05-09
  • 2021-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-18
  • 2017-11-15
  • 2011-09-26
  • 1970-01-01
相关资源
最近更新 更多