dar*_*odp 12 php mysql encryption
我需要解密密码.使用password_hash函数加密密码.
$password = 'examplepassword';
$crypted = password_hash($password, PASSWORD_DEFAULT);
Run Code Online (Sandbox Code Playgroud)
现在,让我们假设$加密后存储在数据库中(有一个"用户"表,其中用户名,密码等),我需要做一个登录:我必须看到,如果由用户输入的密码与加密的密码存储在数据库中.
这是sql代码......
$sql_script = 'select * from USERS where username="'.$username.'" and password="'.$inputpassword.'"';
Run Code Online (Sandbox Code Playgroud)
...但是$ inputpassword没有加密,所以它不等于表用户的密码字段中存储的内容......
那么,有一个使用password_hash后解密的功能?或者我应该更改我的加密方法?还有什么?
Ger*_*osi 23
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.';
}
?>
Run Code Online (Sandbox Code Playgroud)
在您的情况下,仅使用用户名运行SQL查询:
$sql_script = 'select * from USERS where username="'.$username.'"';
Run Code Online (Sandbox Code Playgroud)
并使用类似于上面示例的代码在PHP中进行密码验证.
编辑:以这种方式构建查询非常危险.如果您没有正确地转义输入,代码将容易受到SQL注入攻击.请参阅此 SO答案,了解如何防止SQL注入.
小智 5
密码无法解密,因为这会给用户带来漏洞。所以,你可以简单地使用password_verify()
方法来比较密码。
if(password_verify($upass, $userRow['user_pass'])){
//code for redirecting to login screen }
Run Code Online (Sandbox Code Playgroud)
其中,$upass
是用户输入的密码,$userRow['user_pass']
是数据库中经过password_hash()
函数加密的user_pass字段。