我需要解密密码。密码已使用password_hash功能加密。
password_hash
$password = 'examplepassword'; $crypted = password_hash($password, PASSWORD_DEFAULT);
现在,我们假设它$crypted存储在数据库中(有一个“用户”表,其中包含用户名,密码等),我需要登录:我必须查看用户输入的密码是否与存储在其中的加密密码匹配。数据库。
$crypted
这是SQL代码…
$sql_script = 'select * from USERS where username="'.$username.'" and password="'.$inputpassword.'"';
…但未$inputpassword加密,因此不等于表用户的密码字段中存储的内容…
$inputpassword
所以,有一个使用password_hash?后解密的功能。还是应该更改我的加密方法?或者还有什么?
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答案。