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

时间:2016-03-31 23:40:55

标签: php mysql pdo sha1

我试图在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获取值,我需要加密它们。为什么这不起作用?

2 个答案:

答案 0 :(得分:1)

我认为你没有意识到这是一个错字。查询字符串调用sha1上的:id函数,应在:senha上调用以散列密码。

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

应该是

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

答案 1 :(得分:0)

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

如果您想在URL中加密用户ID,请尝试使用可以编码和解码的base64。 Sha1是一个散列函数,你不能解码。