我真的应该经常与 bcrypt 发生冲突吗?

发布于 2025-01-07 17:23:26 字数 787 浏览 0 评论 0原文

当对两个随机字符串进行哈希处理时,我平均在 100,000 次碰撞中得到 2 次碰撞。 这是预期的吗?

所有这些字符串都会产生相同的散列(使用任何盐和任何工作因子):

base64_decode('/g=');
base64_decode('/gB/==');
base64_decode('/gBQyVY/0dzg');
base64_decode('/gBQyoK71jVY/JZP0dzg=');
base64_decode('/gBQyoK71jVY/J2ea4q9mAZP0dzg==');
base64_decode('/gBQyoK71jVY/J7QuBNJuFdxyf2eTBCs42chkx6ZvpJYszpUcJk8/HXa4q9mAZP0dzg=');

这些只是示例,尝试从中心添加和删除字符,您会得到更多匹配项。 这是用于查找它们的 php 代码:

set_time_limit(60*10);
$salt = '$2a$04$usesomesillystringforsalt$';
for($i=0; $i < 100000; $i++){
    $one = openssl_random_pseudo_bytes(rand(1,111));
    $two = openssl_random_pseudo_bytes(rand(1,111));
    if(crypt($one, $salt)==crypt($two, $salt)){
        echo base64_encode($one).'|'.base64_encode($two)."\n";
    }
}

When hashing two random strings, I get on average 2 collisions out of 100,000.
Is this expected?

All of these strings produce the same hash (using any salt and any work factor):

base64_decode('/g=');
base64_decode('/gB/==');
base64_decode('/gBQyVY/0dzg');
base64_decode('/gBQyoK71jVY/JZP0dzg=');
base64_decode('/gBQyoK71jVY/J2ea4q9mAZP0dzg==');
base64_decode('/gBQyoK71jVY/J7QuBNJuFdxyf2eTBCs42chkx6ZvpJYszpUcJk8/HXa4q9mAZP0dzg=');

And these are just examples, try adding and removing characters from the center, you get many more matches.
Here is the php code used to find them:

set_time_limit(60*10);
$salt = '$2a$04$usesomesillystringforsalt
;
for($i=0; $i < 100000; $i++){
    $one = openssl_random_pseudo_bytes(rand(1,111));
    $two = openssl_random_pseudo_bytes(rand(1,111));
    if(crypt($one, $salt)==crypt($two, $salt)){
        echo base64_encode($one).'|'.base64_encode($two)."\n";
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

情定在深秋 2025-01-14 17:23:26

没关系,PHP 不能很好地处理具有空字节的字符串。
PHP crypt 函数不是二进制安全的。

Nevermind, PHP doesn't play well with strings having a null byte.
The PHP crypt function is not binary safe.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文