在mysql查询中使用sha1哈希更改ID的密码搜索


Change password searching for ID with sha1 hash in mysql query

我试图用PHP PDO中的以下代码更改用户的密码:

public function resetaSenha(string $senha, string $id){
            $con = $this->conexao;
            $sql = "UPDATE users SET senha = :senha WHERE id = sha1(:id)";
            $obj = $con->prepare($sql);
            $obj->bindParam(":senha", $senha);
            $obj->bindParam(":id", $id);
            $obj->execute();
        }

我用id 1的sha1散列和密码调用这个函数(我这样做只是为了测试):

    require_once("funcoes_db.php");
    $func = new FuncoesDb();
    $func->resetaSenha("05fe7461c607c33229772d402505601016a7d0ea", "356a192b7913b04c54574d18c28d46e6395428ab");

但它不起作用。如果我将查询更改为:,它就会工作

$sql = "UPDATE users SET senha = :senha WHERE id =:id";

并用调用函数

    `$func->resetaSenha("05fe7461c607c33229772d402505601016a7d0ea", "1")`;

但我通过URL获取值,我需要对它们进行加密。为什么不这样做?

我想你在没有意识到的情况下打错了字。查询字符串在:id上调用sha1函数,而应该在:senha上调用该函数来散列密码。

$sql = "UPDATE users SET senha = :senha WHERE id = sha1(:id)";

应该是

$sql = "UPDATE users SET senha = sha1(:senha) WHERE id = :id";

您的id列是varchar类型吗?如果不是,如果是int自动递增,则不应在where子句中使用WHERE id = sha1(:id)

如果你想在URL中加密用户id,可以尝试使用base64进行编码和解码。Sha1是一个哈希函数,你无法解码。