0

我一直在用这个 POST 在我的数据库中插入我的密码

$txtPass = md5($_POST['txtPass']);

然后我怎么能反转这个哈希并将存储的值转换为普通字符串?

4

3 回答 3

2

你不能。散列算法是一种方法。这意味着您无法“撤消”它们。您可以做的是将散列值与它们进行比较以查看它们是否匹配。

if ($hashed_value === md5('some string')) {
    //they match
于 2013-09-27T00:17:25.800 回答
1

正如其他人所提到的,哈希是(或应该是)一种单向加密方法。然而,随着查找表的发展,存储散列值不再像以前那样安全。

但是,让它变得更好的一种方法是在加密密码时使用盐。例如:

$salt = "!@#$%^&";

// registration
$password = "letmein";
$dbPassword = md5($salt . $password); // f5eb04f754cff9cd2a4acae54f84dd90

// When they go to login:
$password = $_POST['password'];
$usrPassword = md5($salt . $password);

然后,即使他们通过安全漏洞获得散列,它也总是有一个加盐前缀,使其(几乎从不)与数据库中的实际散列匹配。因此,使用示例:

$password = $_POST['password']; // "!@#$%^&letmein"
$pwWithSalt = $salt . $password; // "!@#$%^&!@#$%^&letmein"

诚然,这是一个简单的示例(您不会使盐分那么明显),但是您至少可以添加另一个级别的复杂性,这会使查找表的效率降低一些。

我还应该提到它crypt有这个内置的并且可能是比 md5 更好的解决方案

于 2013-09-27T00:25:12.690 回答
0

没有 PHP 函数可以“解码”MD5 哈希。如果您真的想找出哈希的原始字符串,那么您可以使用Rainbow tables

这些使您能够查找已知哈希的原始值。但不能保证您能够在任何合理的时间内找到您正在寻找的人,或者根本无法找到。

于 2013-09-27T00:23:16.900 回答