Bcrypt哈希对于不同的字符串是相同的

2024-05-16 01:43:24 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

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')。 我用这两条消息尝试了一下,效果不错,但我想知道如何用bcrypt实现这一点

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

似乎有一个最大的字符限制,但我想知道我怎么能让它工作无论如何


Tags: 字符串hashrsasaltmebcrypthash1msg2
1条回答
网友
1楼 · 发布于 2024-05-16 01:43:24

从文档中:

The bcrypt algorithm only handles passwords up to 72 characters

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

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

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

相关问题 更多 >