当前位置: 首页 > 面试题库 >

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

罗烨霖
2023-03-14
问题内容

我需要解密密码。密码已使用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?后解密的功能。还是应该更改我的加密方法?或者还有什么?


问题答案:

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答案。



 类似资料:
  • 多亏了最近一篇文章中的一些好建议,我才从中实现了PBKDF2https://defuse.ca/php-pbkdf2.htm进入一个小的PHP图像库,我正在建设教自己一些PHP。 我知道您将salt和hash存储在数据库中,然后在用户输入密码时重新构建它们以匹配。我不明白的是,当上面网站上的validate_password函数为同一个密码生成不同的、唯一的salt时,它是如何工作的。 例如,我创

  • 问题内容: 我目前是一名学生,并且正在学习PHP,我正在尝试对PHP中的数据进行简单的加密/解密。我进行了一些在线研究,其中一些非常令人困惑(至少对我而言)。 这是我想做的事情: 我有一个包含这些字段 (用户ID,Fname,Lname,Email,Password)的表 我要拥有的是先将所有字段加密,然后再解密(如果没有任何加密算法,是否可以用于加密/解密) 我想学习的另一件事是如何创建一种与优

  • 我有一个由以下字段组成的表(UserID、Fname、Lname、Email、Password) 我想要的是加密所有字段,然后解密(如果没有任何加密算法,是否可以使用进行加密/解密) 我想学的另一件事是如何创建一个单向的并结合一个好的“salt”。(基本上我只想有一个加密/解密的简单实现,先生/女士,您的回答将会有很大的帮助,非常感谢。谢谢++

  • 问题内容: 创建公司使用的平台的开发人员不再为我们工作,而且我不知道如何从自定义PHP应用程序中检索密码。 当我查看PHPmyAdmin时,密码已加密(例如* 2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19) 如何更改或检索这些? 问题答案: 如果使用正确的加密方法,将无法轻松检索它们。 只需使用新密码重置即可。 编辑: 字符串看起来像它正在使用:

  • 我使用以下代码使用PBKDF2对密码进行哈希: 如何验证身份验证的密码?看来我需要拿到用来哈希密码的盐。我怎么拿到?请注意,我没有使用单独的字段来存储哈希。数据库中只存储散列密码。

  • 每个人在建构 PHP 应用时终究都会加入用户登录的模块。用户的帐号及密码会被储存在数据库中,在登录时用来验证用户。 在存储密码前正确的 哈希密码 是非常重要的。密码的哈希操作是单向不可逆的,该哈希值是一段固定长度的字符串且无法逆向推算出原始密码。这就代表你可以哈希另一串密码,来比较两者是否是同一个密码,但又无需知道原始的密码。如果你不将密码哈希,那么当未授权的第三者进入你的数据库时,所有用户的帐号