MD5 哈希字符串到普通字符串


md5 hashed string to normal string

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

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

然后如何反转此哈希并将存储的值转换为普通字符串?

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

if ($hashed_value === md5('some string')) {
    //they match

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

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

$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更好的解决方案

没有PHP函数来"解码"MD5哈希。如果你真的想找出哈希的原始字符串,那么你可以使用彩虹表。

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