我一直在阅读有关此password_hash()
的各种论坛和教程,这些论坛和教程似乎对密码保护有用。
但是现在我想知道为这个函数制作自己的盐和哈希是否更好
$options = [
'cost' => 11,
'salt' => mcrypt_create_iv(22, MCRYPT_DEV_URANDOM),
];
password_hash($password, PASSWORD_BCRYPT, $options);
或者让函数执行此操作:
password_hash($password, PASSWORD_DEFAULT);
似乎有很多关于使用自己的盐是好还是坏的讨论。
有人可以解释为什么使用自己的盐会不好(或不是)?
答案 0 :(得分:3)
因为如果你不创造自己的盐,它会自动为你创造一个安全的盐。
来自文档:
<强>注意强>
强烈建议您不要生成自己的盐 这个功能。如果,它会自动为您创建一个安全的盐 你没有指定一个。
所以,为了回答你的问题,如果你不了解更多关于盐或其他的东西......只是不要使用你自己的盐,这个功能足够强大了!
答案 1 :(得分:1)
盐只是对彩虹桌攻击的保护
它不会使一个哈希更难以打破,而是更大的整体
如果您为每个哈希使用不同的盐,攻击者将需要为每个密码创建一个彩虹表
这在工作和时间方面是不切实际的
使用伪随机rng生成salt将完成保护更大密码的工作
https://crypto.stackexchange.com/questions/1776/can-you-help-me-understand-what-a-cryptographic-salt-is
由于该功能已经生成安全盐,因此不建议使用实际上更差的rng生成自己的盐。
只要让这个功能产生强盐,就可以了,因为你不必自己制造盐就可以减少工作量。
Correct way of creating salted hash password
引用上一个链接:
建议您不要传递自己的盐,而是让该函数从操作系统的随机源创建一个加密安全的盐。
salt将包含在生成的哈希值中,因此您不必单独存储它。只需在数据库中创建一个60个字符的字符串字段并存储哈希值。函数password_verify()将从存储的哈希值中提取使用过的salt。有关更多信息,您可以查看我的关于存储密码的教程。