我一直在读围绕着几个不同的导游/教程关于这个话题,发现如下:这是一个安全的方式来存储我的密码?
我知道,我所阅读有一个非常安全的方式来存储用户密码。我已经尝试了将第2个结合起来,而不是像第一个例子中那样使用mt_rand
,我已经生成了我自己的动态盐。
这里是我的代码:
<?php
$static_salt = ""; // Removed value for obvious reasons
$dynamic_salt_choice = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
$dynamic_salt_length = 40;
$dynamic_salt = "";
$dynamic_salt_max = strlen($dynamic_salt_choice)-1;
for ($i = 0; $i < $dynamic_salt_length; $i++) {
$dynamic_salt .= substr($dynamic_salt_choice, rand(0, $dynamic_salt_max), 1);
}
$password_length = length($password);
$split_at = $password_length/2;
$password_array = str_split($password, $split_at);
$password = $password_array[0] . $static_salt . $password_array[1];
$password_hash = hash_hmac('sha512', $password, $dynamic_salt);
?>
根据我这是获取一个静态的盐,生成一个动态的盐,我们再分割两个部分给定的密码在一个数组并添加静态盐在两个密码部分之间。
然后我们用密码sha12
和动态盐一起散列。
我给你的问题是,这是更安全还是与我已链接到的2个方法一样安全?或者,我是否通过这种方式混合起来使它变得更加脆弱?
我还把它存在$password_hash
在一个cookie用于cookie的自动登录是一个很大的禁忌?如果是这样,网站如何以安全的方式通过cookie记住你?
可能重复的[安全散列和咸的PHP密码](http://stackoverflow.com/questions/401656/secure-hash-and-salt-for-php-passwords) –