md5将字符串散列为普通字符串

时间:2013-09-27 00:16:09

标签: php html

我一直在使用此POST将我的密码插入我的数据库

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

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

3 个答案:

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

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