PHP中的password_hash()怎么样?

时间:2015-01-06 14:29:38

标签: php hash password-protection

我一直在阅读有关此password_hash()的各种论坛和教程,这些论坛和教程似乎对密码保护有用。

但是现在我想知道为这个函数制作自己的盐和哈希是否更好

$options = [
    'cost' => 11,
    'salt' => mcrypt_create_iv(22, MCRYPT_DEV_URANDOM),
];
password_hash($password, PASSWORD_BCRYPT, $options);

或者让函数执行此操作:

password_hash($password, PASSWORD_DEFAULT);

似乎有很多关于使用自己的盐是好还是坏的讨论。

有人可以解释为什么使用自己的盐会不好(或不是)?

2 个答案:

答案 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。有关更多信息,您可以查看我的关于存储密码的教程。

相关问题