密码哈希和默认盐是否足够?

3
我在想,password_hash("自定义密码", PASSWORD_BCRYPT)是否足够安全地存储密码到数据库中,或者我是否应该添加更多的SALT(例如用户的用户名/电子邮件/出生日期等)。谢谢!

2
建议为每个用户生成唯一的盐值。您可以为每个用户生成一个唯一的盐值并将其存储在数据库中。 - Damien Black
1
也许会增加成本,但使用password_hash()的默认盐生成方式是推荐的选择,而不是创建自己的盐。 - Mark Baker
对已经进行过盐值处理的哈希再次进行盐值处理是毫无意义的。Bcrypt会自动进行盐值处理。 - AJReading
@DamienBlack - password_hash() 已经实现了这个功能,它会从操作系统的随机源生成一个安全的盐值,并将其添加到结果哈希字符串中。你无法自己生成更好的盐值,因此不应该将其传递给函数。 - martinstoeckli
1个回答

3
Bcrypt本身已经足够安全。但请确保将迭代/成本增加到足够高的值(但不要太慢了,以免影响服务器)。您可能需要测试几个值来测试可接受的哈希时间。
不需要为密码添加盐,Bcrypt自动为每个哈希生成唯一的盐并将其存储在哈希中。
参见:如何使用bcrypt内置盐?

谢谢你的回复和链接,伙计。你有什么想法可以帮我查看哪个服务器是最具成本效益的吗? - user3465843
当然,只需创建一个简单的页面并散列一个字符串,看看需要多长时间。您可以手动完成此操作。您还可以使用microtime在哈希之前保存开始时间,然后再次使用microtime在哈希之后查看所需时间。PHP文档页面上还有一个很好的示例,说明如何计算成本:http://docs.php.net/manual/en/function.password-hash.php,请参见示例#4。 - AJReading
给那位点踩的用户,能否添加一条评论说明为什么这不是一个有用的答案? - AJReading

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接