我很抱歉英语的使用不好......我遇到了一个问题,即使用盐(第一次使用盐)制作一个哈希密码的功能。 问题是我不知道如何从函数中真正返回salted / hashed密码。
我的代码:
# Password hashing with a salt.
function hashing($stringPassword)
{
// Making a random uniq code as salt.
$salt = uniqid(mt_rand(), true);
$HASH512 = hash('SHA512', $stringPassword);
$hashPassword = $salt.$HASH512;
return $stringPassword;
}
我是如何尝试测试的:
<?php
$stringPassword = '482301';
hashing($stringPassword);
echo $hashPassword;
?>
感谢您的帮助!
答案 0 :(得分:3)
您的代码是倒退的。在哈希之前,盐必须是密码的一部分。然后你需要返回哈希密码和盐,以便以后可以进行适当的比较。
function hashing($cleartext) {
$salt = uniqid(mt_rand(), true);
$hash512 = hash('SHA512', $salt . $cleartext);
return(array('hash' => $hash512, 'salt' => $salt));
}
$foo = hashing('letmein');
echo "Salt is: $foo[salt]";
答案 1 :(得分:1)
由于您正在散列密码,因此您应该知道SHA *算法不适合散列密码。它们太快了,你需要一个像BCrypt或PBKDF2这样的成本因子的函数,你可以控制计算所需的时间。
PHP提供专用函数password_hash()来生成BCrypt哈希值,对于早期的PHP版本,您可以使用compatibility pack:
// Hash a new password for storing in the database.
// The function automatically generates a cryptographically safe salt.
$hashToStoreInDb = password_hash($password, PASSWORD_BCRYPT);
// Check if the hash of the entered login password, matches the stored hash.
// The salt and the cost factor will be extracted from $existingHashFromDb.
$isPasswordCorrect = password_verify($password, $existingHashFromDb);