我需要解密密码。密码已加密password_hash
功能。
$password = 'examplepassword';
$crypted = password_hash($password, PASSWORD_DEFAULT);
现在,我们假设$crypted
存储在数据库中(有一个“用户”表,包含用户名、密码等),我需要登录:我必须查看用户输入的密码是否与数据库中存储的加密密码匹配。
这是sql代码...
$sql_script = 'select * from USERS where username="'.$username.'" and password="'.$inputpassword.'"';
...but $inputpassword
未加密,因此它不等于用户表的密码字段中存储的内容...
所以,有一个使用后解密的函数password_hash
?或者我应该改变我的加密方法?或者还有什么?
Bcrypt 是一种单向哈希算法,您无法解密哈希值。使用密码验证 http://docs.php.net/manual/en/function.password-verify.php检查密码是否与存储的哈希值匹配:
<?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=?';
并使用与上面示例类似的代码在 PHP 中进行密码验证。
您构建查询的方式非常危险。如果没有正确参数化输入,代码将容易受到 SQL 注入攻击。看这个堆栈溢出答案 https://stackoverflow.com/a/60496关于如何防止SQL注入。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)