我正在使用 UserCake 并遇到了问题。由于某种原因,该generateHash()
功能不再始终如一地工作。这是我正在查看的内容:
funcs.php <-- 函数所在的位置
function generateHash($plainText, $salt = null) {
if ($salt === null) {
$salt = substr(md5(uniqid(rand(), true)), 0, 25);
} else {
$salt = substr($salt, 0, 25);
}
return $salt . sha1($salt . $plainText);
}
class.newuser.php <-- 调用函数创建密码的地方
//Construct a secure hash for the plain text password
$secure_pass = generateHash($this->clean_password);
login.php <-- 调用函数来比较密码的地方
//Hash the password and use the salt from the database to compare the password.
$entered_pass = generateHash($password,$userdetails["password"]);
if($entered_pass != $userdetails["password"]) {
$errors[] = lang("ACCOUNT_USER_OR_PASS_INVALID");
} else {
//Passwords match! we're good to go'
}
我可以成功创建一个新帐户。但是当我登录时,login.php 创建的哈希密码与新用户类创建的密码不同。例如,当我登录时,我print_r
输入了输入的哈希密码和数据库中的哈希密码,这是返回的内容:
$entered_pass = 62b8ce100193434601929323a13a4d95bd3c6535b014e6444516af13f605f36f7
database pass = 62b8ce100193434601929323a153564aaeb4ad75d57b353ee8918cd9829cb5e1b
我唯一能想到的是散列密码从第 26 个字符开始偏离,并且$salt
看起来有 25 个字符(假设这是最大长度?)。所有这些都是库存的 UserCake 东西,所以我不明白为什么它如此不一致。
我会注意到,如果我复制散列$entered_pass
(那里的第一个)并将其粘贴到数据库中,我将成功登录。
编辑>>>
多看几遍后,我认为问题归结为sha1($salt . $plainText);
。看起来好像在第一个之后$salt
事情开始有所不同。此外,当我删除sha1()
它完美登录的功能时,我只是想知道这是否对安全性有任何重大影响。