我一直在用这个 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 哈希。如果您真的想找出哈希的原始字符串,那么您可以使用Rainbow tables。
这些使您能够查找已知哈希的原始值。但不能保证您能够在任何合理的时间内找到您正在寻找的人,或者根本无法找到。