2015-04-21 48 views
0

正如標題,請您告訴我如何用這個編碼的口令字符串解碼:

$密碼= MD5(和addslashes($ _ POST [ '密碼']));

對於例如:f21601fea7f496cfbc23f7310e13f941

謝謝!

+0

它可以顛倒,但不是那麼容易... –

+0

@KrzysztofTrzos多個密碼可以生成相同的MD5散列,所以它*技術*不能顛倒 - 有無數的字符串會匹配任何一個MD5哈希。 – ceejayoz

+1

*「如何解碼密碼:」* - **不要** - 稱它爲僞裝的祝福,它不起作用。在這裏,ircmaxell使用更安全的哈希方法發佈了一個答案http://stackoverflow.com/a/29778421/ –

回答

2

MD5是單向的hashing algorithm。這種算法的性質是它不能被顛倒。它可以,它會是一個加密算法,而不是哈希。

在切換到加密算法之前,不要。如果可能的話,密碼應該總是以散列的形式存儲(有不尋常的情況,比如你爲第三方系統存儲密碼的地方)。如果您的代碼/數據庫受到威脅,這可以保護您的用戶。

對於簡單的字符串,可以在「彩虹表」中查找MD5哈希值。舉例來說,098f6bcd4621d373cade4e832627b4f6可以放入類似http://md5cracker.org/的工具中,以找出密碼是,可能是test(但它可能是導致相同散列的另一個字符串,稱爲a collision)。

注意:由於可以生成彩虹表的速度,MD5也是insecure。散列密碼時,您應該使用內置的password_hash/password_verify函數,因爲它們利用安全的bcrypt散列算法。

+0

實際上,我還添加了一個字段(以註冊表單的形式)以純文本形式存儲用戶密碼,但是當我搜索數據庫中的文本,它沒有工作。 '$ password = md5(addslashes($ _POST ['password'])); $ pwd = addslashes($ _POST ['pwd']);' –

+0

@ChristopherMcKenny不要這樣做。此外,停止與'addslashes'的東西。在你的代碼中這是沒有必要的(MD5哈希將永遠不會有'''字符),它也不足以防止SQL注入。 – ceejayoz

+0

非常感謝! –

相關問題