php - sha1() 用于密码哈希

标签 php

我使用 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
 }

我总是收到密码不匹配的消息。 我哪里出错了?

最佳答案

第一就是第一。 切勿使用 SHA 或 MCRYPT 来存储您的密码

编辑:password_hash() 函数生成一个长密码哈希,因此请确保 mysql 中的列是 VARCHAR 500个空间

所有这些无用的做法是几乎许多网站遭到黑客攻击的根本原因。为了解决这个问题,php 做了很多研究,最后推出了最安全的函数,称为 password_hash()。我不再在这里解释 password_hash() ,因为互联网上已经有很多文档。

您始终可以像这样对密码进行哈希处理

<?php

$securePassword = password_hash($_POST['password'], PASSWORD_DEFAULT);

$query = $db->query('INSERT INTO users ......');

?>

并且,要验证密码,您可以简单地使用此功能

<?php

$passwordHash = $query['password']; //Password from database
$userPassword = $_POST['password']; //Password from form

if(password_verify($userPassword, $passwordHash)) {
    echo 'Password is correct, logged in!';
} else {
    echo 'Password is wrong, try again';
}

?>
<小时/>

然后,回答你的问题。

请不要使用 SHA 或 MCRYPT 或 BCRYPT。如果您想让您的网站遭到黑客攻击,请继续。或者使用password_hash()

每次没有生成哈希值的原因是 openssl_random_pseudo_bytes() 每次都会生成随机数。因此,每次在执行过程中,该函数都会返回不同的数字,并且您的 sha 结果会错误,从而发出 FALSE 警报。

请再说一遍。我恳求您使用 password_hash() 函数

<小时/>

有关 password_hash()password_verify() 的更多信息:

关于php - sha1() 用于密码哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43864666/

相关文章:

php - WordPress 自定义图片上传字段

php - 6 个月后将用户状态从 0 更改为 1

php - "Error in mysql syntax"对问题没有真正的想法

php - 如何通过 Rest Api 使用 Firebase Auth Admin SDK?

php - 当我从 PHP 传递字符串时,ajax 代码停止运行

php - 如何在图像周围添加图像边框?

php - Crypt() 用户 ID 为字母数字,用于 API 请求 URL

php - COUNT操作前如何检查?

php 如何将查询结果从服务器 1 插入到 mySQL php 中的服务器 2 表

php - SQL 查询中的数组?