我研究加密方法已经有一段时间了,到目前为止,我发现Bcrypt是目前最好的方法之一。我还不明白的是Bcrypt的精确工作方式。我知道要花更长的时间才能解决,这就是为什么强暴如此困难的原因。
但我不明白它是否需要其他措施,如随机盐,以确保它的安全。特别是在阅读了关于md5和如何使用随机盐的文章之后,在哈希变得安全之前几乎是强制性的。
我在php.com上找到的示例代码如下:
$options = [  'cost' => 12, ];
echo password_hash("rasmuslerdorf", PASSWORD_BCRYPT, $options)."\n";
?>我猜成本很简单,所以它会经过12次函数来加密"rasmuslerdorf“这个词。"PASSWORD_BCRYPT“选择Blowfish算法。
PASSWORD_DEFAULT和PASSWORD_BCRYPT之间有什么大的区别吗?对我来说,在注册时使用默认函数加密密码就足够了吗?并将用户在登录时输入的密码与数据库中的加密密码进行比较?
发布于 2015-02-25 12:43:55
我猜成本只是简单的,所以它通过12次函数加密单词"rasmuslerdorf“
不,成本参数会影响要完成的工作量的指数。
但我不明白它是否需要其他措施,如随机盐,以确保它的安全。
password_hash()函数在运行时会自动生成随机盐;或者,可以通过以下选项传递自定义盐:
password_hash('bla', PASSWORD_BCRYPT, ['salt' => ...]);通过传递一个定制的盐,你被认为知道你在做什么。为了所有实际目的,你应该安全地坚持自动生成的盐类。
PASSWORD_DEFAULT和PASSWORD_BCRYPT之间有什么大的区别吗?
PASSWORD_DEFAULT算法是为将来的代码提供的,方法是始终使用当时可用的最强大的算法(前提是更新PHP)。最大的区别是存储需求;而Bcrypt总是使用60个字符,但是您需要满足更大的存储空间(例如255个字符),无论将来使用什么。
并将用户在登录时输入的密码与数据库中的加密密码进行比较?
有关如何验证用户输入的密码的示例,请查看password_verify()。
发布于 2015-02-25 12:37:54
Bcrypt算法是默认的算法。所以,PASSWORD_DEFAULT和PASSWORD_BCRYPT是一样的。默认算法可以在您的php.ini文件中配置,但是如果您不知道这一点,那么它很可能仍然是默认的。
cost数字不是它被散列的次数。使用公式2^cost计算散列次数。因此,如果成本是12,那么它将被散列2^12倍(4096)。
在使用该功能时,您不必考虑盐类。它创建salt本身并将其附加到输出哈希:
$[algorithm]$[cost]$[salt 22 chars][rest is the hash]在使用密码散列函数时,永远不要碰哈希。若要对has验证密码,应使用password_verify()。
您使用的函数是创建的,这样人们就可以在不知道后台发生了什么的情况下散列密码。这是一件好事,因为当涉及到哈希密码时,很容易出错,即使你认为自己知道自己在做什么。
https://stackoverflow.com/questions/28719060
复制相似问题