gpt4 book ai didi

PHP:在 MySQL 中替换字符串中的 'dollar'

转载 作者:太空宇宙 更新时间:2023-11-03 10:57:32 24 4
gpt4 key购买 nike

我有一个严重的问题,一整天我都在寻找答案,但我找不到任何东西......

我在做什么:

我正在尝试让用户登录我的网站(在 php 中)。

密码和用户保存在我服务器上的 MySQL 数据库中。

对于我使用的密码,Bcrypt。唯一的问题是我不知道如何更改 Bcrypt 代码。我从一个免费的网站上获得了类(class)。

问题

现在的问题是,当我对密码进行哈希处理时,前面有三个 $ 符号。

例如:loltest 将变为 $2y$10$wxadWEbkn..XpJ.C1TmnaeOyneJyQbcAIJ20yBBlBoBr1XDwDkJSq

散列密码存储在我数据库的一个表中。

第一步

用户登录一个 typs 他/她的密码,然后 php 代码验证密码是否与散列密码匹配。用户名为 $phpro_username,密码存储在 $phpro_password 中。

但在我调用该函数之前,我会像这样从我的表中选择散列密码:

 $dbh = new PDO("mysql:host=$mysql_hostname;dbname=$mysql_dbname", $mysql_username,      $mysql_password);    
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $dbh->prepare("SELECT phpro_password FROM phpro_users WHERE phpro_username = '$phpro_username'");
$stmt->execute();
$hash = $stmt->fetchColumn();

第 2 步

我尝试使用名为password_verify 的函数,它看起来像这样:

function password_verify($password, $hash) {
if (!function_exists('crypt')) {
trigger_error("Crypt must be loaded for password_verify to function", E_USER_WARNING);
return false;
}
$ret = crypt($password, $hash);
if (!is_string($ret) || strlen($ret) != strlen($hash) || strlen($ret) <= 13) {
return false;
}

$status = 0;
for ($i = 0; $i < strlen($ret); $i++) {
$status |= (ord($ret[$i]) ^ ord($hash[$i]));
}

return $status === 0;
}

我该怎么做?

$check = password_verify($phpro_password, $hash);

如果密码匹配 $check 将为 1,否则为空。

通常这应该可以工作,但是当我运行这段代码时,$check 总是空的。如果我尝试在没有 MySQL 的情况下执行此操作,则没有问题:

<?php
include 'password.php';
$password = "loltest";
$hash = password_hash($password, PASSWORD_BCRYPT);
$verify = password_verify("loltest", $hash);
echo $verify;
?>

例如,如果我运行上面的代码,$verify 始终为 1。

经过一些研究:

我认为问题出在 MySQL 上,因为在我的散列中有三个 $ 符号,如果我将其存储在 MySQL 中然后将其取出,则变量会随着它们的值而改变,在这种情况下什么都没有,密码不匹配。

有办法解决吗?或者有没有办法替换我的散列中的 $ 符号?

最佳答案

单引号字符串不会被处理,而是“按原样”使用。除非您特别需要 $variable,否则您应该始终使用单引号字符串。

例如,

$var = "$2y$10$wxadWEbkn..XpJ.C1TmnaeOyneJyQbcAIJ20yBBlBoBr1XDwDkJSq";

应该是

$var = '$2y$10$wxadWEbkn..XpJ.C1TmnaeOyneJyQbcAIJ20yBBlBoBr1XDwDkJSq';

关于PHP:在 MySQL 中替换字符串中的 'dollar',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18989580/

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