我一直在使用此POST将我的密码插入我的数据库
$txtPass = md5($_POST['txtPass']);
我怎样才能反转这个哈希并将存储的值转换为普通字符串?
答案 0 :(得分:2)
你做不到。散列算法是单向。这意味着你无法“撤消”它们。您可以做的是将散列值与它们进行比较,看它们是否匹配。
if ($hashed_value === md5('some string')) {
//they match
答案 1 :(得分:1)
正如其他人所提到的,散列是(或应该是)单向加密方法。但是,随着lookup tables的发展,存储哈希并不像以前那样安全。
然而,使其成为 little 更好的一种方法是在加密密码时使用salt。例如:
$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更好的解决方案
答案 2 :(得分:0)
没有PHP函数来“解码”MD5哈希。如果您真的想找出哈希的原始字符串,那么您可以使用rainbow tables。
这使您可以查找已知哈希的原始值。但无法保证您能够在任何合理的时间内找到您正在寻找的那个,或者根本无法找到。