小编典典

如何在PHP中解密密码哈希?

mysql

我需要解密密码。密码已使用password_hash功能加密。

$password = 'examplepassword';
$crypted = password_hash($password, PASSWORD_DEFAULT);

现在,我们假设它$crypted存储在数据库中(有一个“用户”表,其中包含用户名,密码等),我需要登录:我必须查看用户输入的密码是否与存储在其中的加密密码匹配。数据库。

这是SQL代码…

$sql_script = 'select * from USERS where username="'.$username.'" and password="'.$inputpassword.'"';

…但未$inputpassword加密,因此不等于表用户的密码字段中存储的内容…

所以,有一个使用password_hash?后解密的功能。还是应该更改我的加密方法?或者还有什么?


阅读 908

收藏
2020-05-17

共1个答案

小编典典

Bcrypt是一种单向哈希算法,您无法解密哈希。使用password_verify检查密码是否与存储的哈希匹配:

<?php
// See the password_hash() example to see where this came from.
$hash = '$2y$07$BCryptRequires22Chrcte/VlQH0piJtjXl.0t1XkA8pw9dMXTpOq';

if (password_verify('rasmuslerdorf', $hash)) {
    echo 'Password is valid!';
} else {
    echo 'Invalid password.';
}
?>

在您的情况下,仅使用用户名运行SQL查询:

$sql_script = 'select * from USERS where username="'.$username.'"';

并使用类似于上面示例的代码在PHP中进行密码验证。

编辑:以这种方式构造查询是非常危险的。如果您无法正确地转义输入,则代码将容易受到SQL注入攻击的攻击。见对如何防止SQL注入SO答案。

2020-05-17