2012-11-28 47 views
0

我知道我應該將md5(password.salt)保存到數據庫中。但我有一些好奇的問題: +我也應該md5的內容/文本字符串以及密碼爲鹽)? 示例:如果數據庫被泄露,攻擊者無法讀取封閉論壇的內容 +如果我不應該讀取內容並將它們全部保存爲純文本,那麼攻擊者試圖獲取用戶密碼有什麼意義當他手頭有數據庫?保存到數據庫之前應該散列哪些信息?

+0

MD5是* hash *算法,不是* encryption *。如果你有一個只能被特定個人閱讀的「封閉式論壇」,那麼你可能會考慮使用gpg之類的內容來加密內容,並且每個人都應該能夠閱讀內容。然後他們可以用他們的私鑰解密內容(當然他們不會發送給你)。除了最安全的應用程序之外,這對於所有應用程序來說可能都是過分的。 –

+1

你不應該md5(password.salt)。你應該使用像bcrypt這樣的專用密碼哈希算法。 md5壞了,不應該被認爲是安全的。其他「普通」散列(如SHA1或SHA2)也不適用於安全密碼存儲。 –

回答

1

散列密碼的目的是爲了防止獲得訪問數據庫的第三方知道用戶密碼是什麼。你的數據庫內容已經被盜用了,所以論壇內容已經暴露。你不想要的是讓人們的密碼受到損害,因爲許多人在多個網站上使用相同的密碼。

如果你有一個安全的論壇,那麼你需要防止攻擊者訪問數據庫。如果他們進入,您的論壇帖子就會暴露。不要試圖進一步保護他們。這個想法是,如果攻擊者獲得對數據庫的訪問權限,那麼您已經限制了損害的表面積。您的網站數據被泄露,但希望不是用戶的憑據。有些人會在您的網站上使用他們的銀行用戶名和密碼,這就是您想要保護的。

請記住,散列函數是一種方法。你不能取消散列數據。這對密碼很好:你不需要知道人們的密碼是什麼,你只需要能夠比較它們。它不適用於論壇帖子。散列不是加密。加密的數據可以被解密。散列數據不能被散列。

+0

謝謝!現在理解了。 – gaixixon

+0

@gaixixon - 真正考慮使用BCrypt,這個[tutorial](http://www.martinstoeckli.ch/hash/en/index.php)描述了爲什麼你需要像BCrypt這樣慢速的密鑰派生函數。我在使用PHP,可以使用PHP的5.5實現,[兼容包](https://wiki.php.net/rfc/password_hash)可用。 – martinstoeckli

相關問題