2013-09-27 89 views
0

我在我的数据库中插入我的密码,这个职位MD5散列串正常串

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

我怎么可能再扭转这种哈希和转储值到一个正常的字符串?

+0

我已经做了一些轻微的措词你的问题更好的解决方案。如果它不完全符合您的要求,请随时恢复。 – 2013-09-27 00:20:44

+0

当然,这是一个散列,但不要把它看作只是加密时的散列。加密它,加入盐,迭代很多次,然后我们可以谈。现在当然你不能“散列”一个散列,首先散列的重点是什么?您只能比较散列字符串的结果。 – Jonast92

+0

您正在考虑错误的方式......我们正在对密码进行加密,而不是稍后解密它们,但要保护它们。如果稍后需要比较输入密码是否与数据库中的加密值相匹配,则需要使用相同的哈希处理,然后比较两个哈希值。如果它们匹配,则可以假定输入的密码是正确的。希望这可以帮助。 – Thanos

回答

2

你不能。散列算法是单向。这意味着你不能“撤销”它们。你可以做的是将散列值与它们进行比较,看看它们是否匹配。

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

好吧,所以也许我的解决方案是我的密码在我的项目的更新配置文件页面中保留空白谢谢先生 – user2805941

0

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

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

1

正如其他人提及的,散列是(或应是)的单向加密方法。但是,随着lookup tables的发展,存储散列并不像以前那样安全。

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

$salt = "[email protected]#$%^&"; 

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

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

这样,即使他们通过一个安全漏洞获得哈希它总是要腌前缀使得它(几乎没有),匹配在数据库中的实际哈希值。因此,使用例如:

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

当然,这是一个简单的例子(你不会让盐是显而易见的),但是你至少可以增加复杂性的另一个层面,这使得查找表效果稍差。

我还要提到的是crypt有此内置而且可能比MD5