python - Bcrypt哈希对于不同的字符串是相同的
问题描述
我正在尝试使用bcrypt(在 python 中)为 2 个更长的不同字符串创建一个哈希
这适用于较短的字符串(例如"a"
and "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 库中的哈希不使用任何盐,但我可以简单地将盐作为字符串添加到主字符串的末尾)
似乎有最大字符限制,但我想知道我怎么能让它工作。
解决方案
从文档:
bcrypt 算法只处理最多 72 个字符的密码
https://pypi.org/project/bcrypt/
因此,您的文档以相同的字符序列开头的事实意味着您将获得相同的哈希值。
上面刚刚出现了一条评论,链接到相同的内容。该文档还包含一个解决方法。但是,该解决方法确实涉及使用另一个库(例如 RSA)进行预散列,因此您是否需要 bcrypt 将取决于您的用例。
推荐阅读
- plugins - 哪些 IDE 最容易为其编写插件?
- visual-studio-code - VSCode 终止终端快捷方式停止工作
- javascript - 悬停时播放 HTML5 视频
- google-cloud-dataflow - beam.io.WriteToText 在每个值后添加新行 - 可以删除吗?
- html - CSS SVG 文件在用作背景图像时删除填充
- c# - 渲染包含数百张图像的视图
- python - 在 Python 中将 3D 表面投影到 2D 平面(展开/展开)
- python - 如何在 LXML 中导入链接的 XSD 文件
- elasticsearch - ElasticSearch - 将索引恢复到较低版本
- cypher - 如何在 Neo4j 中创建 geohash 树