gpt4 book ai didi

PHP Blowfish 困惑

转载 作者:搜寻专家 更新时间:2023-10-31 22:09:27 25 4
gpt4 key购买 nike

我一直在研究在 php 应用程序中保护密码的更好程序。形式上我会使用类似的东西(只是一个例子,不要开枪!):

$salt = md5(rand() . md5(rand() . '$%E$%SDRT');
$password = md5('supersecret', $salt);

然后我会为数据库中的每个密码生成不同的盐,以防止使用彩虹表。

虽然看起来大多数(明智的)人都在转向 bcrypt(),但在网上查看。关于它如何工作、为什么工作等有很多问题,但我不明白的是它如何更安全?请注意,我在这里可能对我的理解感到困惑

据我了解,当您使用 crypt($pass, $salt) 时,salt 实际上用作 crypt 的指示器,告诉它使用什么算法。根据 php 手册,您使用“$2a$07”,它告诉 crypt 在 log2 轮次使用河豚。然后它吐出一个包含盐作为前缀的字符串。

手册中的示例:

Blowfish:     $2a$07$usesomesillystringfore2uDLvp1Ii2e./U9C8sBjqp8I90dH6hi

似乎所有密码的盐都保持不变。我不明白这是如何安全的。黑客似乎更容易找到盐(甚至不需要从盐柱中取出),并且开始时有一个信标指示使用的轮数和算法。这怎么能更安全?我知道更多的回合对硬件造成更高的损失,使其可扩展并增加破解密码所需的时间(由于成本),但它也确切地表明它是如何完成的。

此外,我喜欢自己编写尽可能多的应用程序代码,以便更好地了解工作原理,并且如果可能的话,我宁愿远离 openwall。我不喜欢依赖其他人的代码并吸收他们的漏洞。我宁愿为自己的漏洞负责,自己修复。

还有一件事。如果增加轮数,这是否意味着当前密码哈希值将与数据库中的哈希值不匹配?您是否必须重置所有用户的密码,或者在他们下次登录时慢慢将他们移至新的轮数?

正如我所说,这只是我的理解,因此可能只是我的理解有所混淆。我不认为这是您可以“尝试并失败”的情况之一,因为如果您失败了,您看到的可能不仅仅是一个损坏的应用程序...

我一直在阅读的内容:

What is the correct format for a blowfish salt using PHP's crypt?
PHP Manual - Crypt
Openwall phpass
How to create and store password hashes with Blowfish in PHP
How do you use bcrypt for hashing passwords in PHP?

最佳答案

据我了解,您的问题是“为什么使用变量 salt 进行散列更安全?”。

只有一件事:它始终是暴力破解,如果盐值不变,则可以仅用一次暴力破解循环“破解”所有密码。 (如果哈希等于数据库中的 1 - 我们知道用户密码)。

对于简单的 md5() 和 sha1() 哈希函数,还可以将生成的强制密码哈希值存储在数据库中(以供将来使用)。这种方法允许黑客在几秒钟内确定几乎所有的密码。

关于PHP Blowfish 困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14433843/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com