作者:庾承泓_689 | 来源:互联网 | 2023-02-04 14:17
我使用sha1来保护我的密码.我在register.php中以这种方式存储了密码
// secure password
$salt = openssl_random_pseudo_bytes(20);
$secured_password = sha1($password . $salt);
//Send it to mysql table
$result = $access->registerUser($username, $secured_password, $salt, $email, $fullname);
这一切都很好.
问题在这里:
在我的login.php中
$password = htmlentities($_POST["password"]);
$secure_password = $user["password"];
$salt = $user["salt"];
// 4.2 Check if entered passwords match with password from database
if ($secure_password == sha1($password . $salt)) {
//do something
} else {
//do something
}
我总是得到密码不匹配.我哪里错了?
1> 小智..:
首先是第一个.切勿使用SHA或MCRYPT存储您的密码.
编辑:该password_hash()
函数生成一个长密码哈希,所以请确保您的mysql中的列是VARCHAR
500空间
所有这些无用的实践是几乎许多网站被黑客攻击的根本原因.为了解决这个问题,php做了很多研究,然后最后得到了最安全的函数叫做password_hash()
.我不再在password_hash()
这里解释,因为互联网上已有很多文件.
你总是可以像这样哈希密码
query('INSERT INTO users ......');
?>
而且,要验证密码,您只需使用此功能即可
并回答你的问题.
请不要使用SHA或MCRYPT或BCRYPT.如果你想让你的网站无法访问,那就继续吧.或使用password_hash()
你每次都没有得到哈希处理的原因,因为每次都会openssl_random_pseudo_bytes()
产生随机数.因此,每次执行期间,函数都会返回不同的数字,并且您的sha
结果会出错,从而发出FALSE
警报.
请再说一遍.我鼓励你使用password_hash()
功能
有关更多信息,password_hash()
与password_verify()
:
http://php.net/manual/en/function.password-hash.php
http://php.net/manual/en/function.password-verify.php