【发布时间】:2015-04-17 14:26:57
【问题描述】:
在使用 PHP 的本机 password_hash() 函数时,必须(或应该)生成我自己的盐,即使(据我了解)它已经可以创建一个盐,如本示例中所示(由 http://www.php.net 提供):
<?php
/**
* Note that the salt here is randomly generated.
* Never use a static salt or one that is not randomly generated.
*
* For the VAST majority of use-cases, let password_hash generate the salt randomly for you
*/
$options = [
'cost' => 11,
'salt' => mcrypt_create_iv(22, MCRYPT_DEV_URANDOM),
];
echo password_hash("rasmuslerdorf", PASSWORD_BCRYPT, $options)."\n";
?>
目前我一直在使用 sha512 进行散列并生成 38,500 个字符的盐。 (我不确定字符数是否真的很重要,所以我还是尝试了......它似乎奏效了,让我可以成功注册和登录用户,但我不知道整个安全漏洞) 像这样的:
<?php
$Salt = str_repeat(hash("sha512", uniqid(time())), 40);
?>
很奇怪,但说到密码学,我还有很多东西要学。 (这里是一种盐的链接https://shrib.com/F7lB9Ycf) 现在,如果我要添加额外的盐(如果您要说是,请再次添加盐),那么我将如何在使用 password_verify() 时添加盐?
提前感谢任何可以提供帮助的人!
【问题讨论】:
-
password_hash()生成自己的盐。不用再加盐了。 -
好吧……那么在你看来,如果我再次加盐会不会降低安全性?
-
盐吃多了对身体不好
-
如果您想探索不同加盐方案的相对优点,那么Information Security 将是一个更好的提问地点。您可能可以通过反复加盐和散列密码来提高安全性,但每次迭代都有代价。问题真的是'它足够安全吗?'
-
哈哈,对你的心脏不好^.^…但它甚至会加长密码。
标签: php cryptography salt bcrypt php-password-hash