2013-09-27 88 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