不同字符串的 Bcrypt 哈希相同

Bcrypt hash is same for different strings

我正在尝试使用 bcrypt(在 python)

为 2 个更长的不同字符串创建哈希

这适用于较短的字符串(如 "a""b"),但是当我使用长字符串时,具有相同的开头,它 returns 相同的散列。

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

import bcrypt

hash_msg1 = b"1 b'b$kknL1S6HaV1/DyNiHhV/ue9SPIOAx.qY2iE33QS8.pi8jM0gvZ53a' {'him': -120, 'me': 100}"
hash_msg2 = b"1 b'b$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')

这会打印 'Hash is the same'

我尝试使用另一个名为 rsa 的库,您可以在其中使用 rsa.compute_hash(message, 'SHA-256')。 我用这两条消息试过了,它起作用了,但我想知道如何用 bcrypt.

做到这一点

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

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

来自文档:

The bcrypt algorithm only handles passwords up to 72 characters

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

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

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