Bcrypt是否需要任何东西才能确保安全

Cre*_*ket 2 php security encryption bcrypt

我现在一直在研究加密方法,到目前为止我发现的是Bcrypt是目前最好的方法之一.我还没有得到的是Bcrypt精确工作的方式.我知道解决这个问题需要更长的时间,这就是为什么它如此难以实现.

但我不明白它是否需要其他措施,如随机盐,以确保其安全.特别是在阅读了关于md5以及如何在哈希变得安全之前几乎必须使用随机盐之后.

我在php.com上找到的示例代码是这样的:

$options = [  'cost' => 12, ];
echo password_hash("rasmuslerdorf", PASSWORD_BCRYPT, $options)."\n";
?>
Run Code Online (Sandbox Code Playgroud)

我猜测成本只是让它通过功能12次来加密"rasmuslerdorf"这个词.并且"PASSWORD_BCRYPT"选择Blowfish算法.

PASSWORD_DEFAULT和PASSWORD_BCRYPT之间有什么大的区别吗?我是否足以使用默认功能在注册时加密密码.并且比较用户加密后加密的密码登录到数据库中的加密密码?

Ja͢*_*͢ck 5

我猜测成本只是让它通过功能12次加密"rasmuslerdorf"这个词

不,成本参数会影响指数量的工作.

但我不明白它是否需要其他措施,如随机盐,以确保其安全.

password_hash()无论何时运行,该函数都会自动生成随机盐; 或者,可以通过选项传递自定义盐:

password_hash('bla', PASSWORD_BCRYPT, ['salt' => ...]);
Run Code Online (Sandbox Code Playgroud)

通过传递定制盐,你会被认为知道你正在做什么.出于所有实际目的,您应该安全地坚持使用自动生成的盐.

PASSWORD_DEFAULT和PASSWORD_BCRYPT之间有什么大的区别吗?

PASSWORD_DEFAULT算法通过始终使用当时可用的最强算法提供面向未来的代码(前提是你更新PHP).显着的差异在于存储要求; 而Bcrypt总是使用60个字符,你需要为将来使用的任何东西提供更大的存储空间(例如255个字符).

并且比较用户加密后加密的密码登录到数据库中的加密密码?

请查看password_verify()有关如何验证用户输入的密码的示例.