gpt4 book ai didi

php - 注册时生成的哈希与登录时生成的哈希不同

转载 作者:行者123 更新时间:2023-11-29 00:28:56 25 4
gpt4 key购买 nike

我在用户注册时生成了一个散列密码,但在尝试登录时生成的散列密码不同,所以我无法登录

reg:(一旦我得到散列密码,我将添加检查和验证)

session_start();    

require_once('connect.php');

$login = $_POST['login'];
$password = $_POST['password'];
$cpassword = $_POST['cpassword'];


if($login == '') {
echo "Email missing";
}
if($password == '') {
echo "Password missing";
}
if($cpassword == '') {
echo "Password missing";
}
if( strcmp($password, $cpassword) != 0 ) {
echo "Passwords do not match";
}

$stmt = $db->prepare("INSERT INTO members (Email, Password) VALUES (:login, :password)");
$stmt->bindValue( ":login", $login );
$stmt->bindValue( ":password", hash("sha512", $password, $salt));
$stmt->execute();

if ($stmt)
{
header("location: ?p=register-success");
exit();
}

登录:

session_start();

include_once ('connect.php');

$Email = $_POST['Email'];
$Password = $_POST['Password'];

$stmt = $db->prepare("SELECT * FROM members WHERE Email = :Email AND Password = :Password");
$stmt->bindParam(":Email", $Email);
$stmt->bindParam(":Password", hash("sha512", $Password, $salt));
$stmt->execute();
$member = $stmt->fetch(PDO::FETCH_ASSOC);
if ($member)
{
$_SESSION['SESS_MEMBER_ID'] = $member['Member_ID'];
$_SESSION['SESS_POST_AS'] = $member['Post_As'];
$_SESSION['SESS_AUTH'] = $member['auth'];
session_write_close();
header('location: index.php');
} else {
header("location: ?p=login-failed");
}

我的盐:(一组固定的字符,仅供测试)

$salt = "Zo4rU5Z1YyKJAASY0PT6EUg7BBYdlEhPaNLuxAwU8lqu1ElzHv0Ri7EM6irpx5w";

我在将它们提交到相关注释之前通过回显散列密码来检查它们是否相同,一旦散列密码存储在我的表中,它就与表中注册时提交的密码不同? ?代替一些特殊字符

最佳答案

hash 的第三个参数确定哈希的输出是否是原始的,即未编码为十六进制。您的盐是真实的,因此输出是原始的,并且您的数据库正在尝试将其编码为字符串。

您可能打算使用 hash_hmac .但是无论如何都要切换到 Bcrypt;固定盐没那么有用。

关于php - 注册时生成的哈希与登录时生成的哈希不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17531460/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com