【发布时间】:2011-11-04 05:42:11
【问题描述】:
我一直在阅读有关此主题的一些不同指南/教程,发现以下内容:
我知道我所阅读的内容是一种非常安全的方式来存储用户密码。我尝试将 2 稍微组合起来,而不是像第一个示例中那样使用 mt_rand,而是生成了自己的动态盐。
这是我的代码:
<?php
$static_salt = ""; // Removed value for obvious reasons
$dynamic_salt_choice = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
$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 种方法更安全还是一样安全?还是我通过这种方式混淆了它使其更容易受到攻击?
我还认为它在 cookie 中存储 $password_hash 旁边的用户名 cookie 用于自动登录是一个很大的禁忌吗?如果是这样,网站如何通过 cookie 以安全的方式记住您?
【问题讨论】:
标签: php security encryption hash passwords