回答
簡短的回答是:你不要。你實際存儲的是通過單向散列函數運行用戶密碼的結果。之前我會想到使用像MD5這樣的東西會沒事的,直到我看到this,並建議看看bcrypt,因爲它可以幫助抵禦暴力攻擊。
許多致力於bcrypt upvotes在這裏。散列用戶密碼以對存儲的密碼進行測試的情況相對較少,因此使用.1s來執行該操作應該不成問題。但是,嘗試在相同的10/s下對哈希進行強力攻擊,並且永遠不會完成。隨着硬件標準的提出,Bcrypt也可以進行調整,以便進行更多的工作,從而使其兼容。 – 2011-04-01 13:05:12
是的,是什麼促使我bcrypt讀到一個網站被黑客入侵,他們的用戶數據庫被下載。在這種情況下,如果您使用快速哈希,那麼可以避免攻擊者通過密碼強制攻擊。 – 2011-04-01 16:30:25
@JosephMastey我很懷疑。如果你用.1s來測試密碼,你的服務器是不是很容易被DDoS攻擊? – 2013-01-19 18:07:52
存儲密碼的簡單但安全的方法是使用MD5加密。
md5($password);
將給出md5加密值。
你要存儲原始密碼,這樣
md5($password)
登錄腳本schould是這樣的:
$sql = "SELECT `id` WHERE username=`$username` AND password=`" . md5($password) . "`";
$result = mysql_query($sql,$link);
if (mysql_num_rows($result) == 1) {
// user is authenticated
}
這實際上應該更加複雜,但對於概念化來說,它已經被簡化了。
單獨使用密碼使用MD5是不安全的。它可以使用[彩虹表](http://en.wikipedia.org/wiki/Rainbow_table)進行攻擊(一個表包含MD5散列,用於查找應用於MD5函數的原始值的可能值)。 – VCD 2013-07-23 04:11:53
本示例不包含醃製密碼或高級哈希方法。它只是一個簡單的用戶查找,無需返回任何用戶名和密碼。 – 2013-07-23 13:34:36
我對這個答案的理解是,它鼓勵人們用MD5散列密碼並將其存儲在數據庫中,這已知是不安全的。如果這個例子只是簡單地做一個用戶查詢,那麼這個答案與詢問如何存儲密碼的問題無關。此外,我不認爲簡單的用戶查找應該使用密碼作爲過濾條件。 – VCD 2013-07-24 02:25:11
散列在存儲密碼中很常見。但它們都是一樣的,只是它產生的哈希結果越長,被黑客攻擊的難度就越大。來自相同散列函數的散列結果通常具有相同的長度。對輸入文本(長度無限制)沒有限制,可以從多個句子/單詞中產生1個相同的散列字符串。這是洞所在的地方。閱讀更多關於pigeonhole principle和Birthday Attack
我通常使用MD5()。但它已經超出了我猜測的標準,因爲一些碰撞事情。不知何故,人們發明了一種可以檢測1個散列字符串的系統,其中多個實際字符串爲 。
使用SHA代替。爲了使它更安全,你可以在它上面添加$ salt,使它成爲雙重保護,所以,首先對實際密碼進行哈希,將哈希值加入哈希密碼,然後再次哈希它們。
請記住,結果字符串越長越好。
一些推薦bcrypt,但我從來沒有使用過它。
謝謝我從來不知道鴿子的原理。 – PHP 2011-04-01 02:24:34
爲了讓事情變得簡單,使用帶有鹽的md5。 MD5是單向散列。例如:
md5("hello") = "5d41402abc4b2a76b9719d911017c592"
所以,沒有鹽,你挽救了「5d41402abc4b2a76b9719d911017c592」到你的數據庫。然後,當您嘗試通過輸入密碼進行登錄時,您會將輸入密碼的md5與您保存的md5進行比較。
if (md5($input_password) == "5d41402abc4b2a76b9719d911017c592")
log_in_user();
但是,md5是不安全的,因爲x的md5總是y。因此,如果您要破壞數據庫並找到列爲「y」的密碼,那麼如果您創建或下載了md5查找表,則知道該密碼爲「x」。
而是做這樣的事情:
$password_to_save_to_db = md5(md5($input_password . $date_user_registered));
因此,每個用戶都會有自己獨特的鹽和這些查詢表將變得毫無用處。 (這可能是黑客想偷每個密碼重新創建,但這是耗費更多的時間和加上雙MD5使事情變得有點困難。
你可以閱讀更多的http://sameerparwani.com/posts/using-salts-for-extra-security
- 1. 安全存儲密碼的最佳方法
- 2. 在MySQL中使用/存儲加密密鑰的最佳方法是什麼
- 3. 存儲密鑰的最佳做法
- 4. 加密/解密字符串和密鑰存儲方法的最佳算法
- 5. 什麼是安全存儲密碼(散列)的最佳方式
- 6. Play Framework 2存儲用戶密碼哈希的最佳方式
- 7. 保護SQL密碼的最佳方法
- 8. 存儲MySQL密碼
- 9. 在mysql中存儲html代碼的最佳方式是什麼?
- 10. 存儲查找值的最佳方法
- 11. xml數據存儲的最佳方法
- 12. 存儲文本的最佳方法?
- 13. 存儲位圖的最佳方法
- 14. 存儲數據表的最佳方法
- 15. 存儲「時間」值的最佳方法
- 16. 什麼是存儲AES加密密鑰的最佳方式?
- 17. 什麼是存儲加密密鑰的最佳方式?
- 18. ,保存密碼的最佳方法是什麼?
- 19. 在MySQL數據庫中存儲數組的最佳方法?
- 20. 在mysql中存儲大數據的最佳方法
- 21. 在MySQL中存儲Hijri日期的最佳方法?
- 22. MySQL:存儲MAC地址的最佳方法?
- 23. 在mysql數據庫中存儲python time.struct_time的最佳方法
- 24. 在mysql中存儲短數字的最佳方法
- 25. 在MySQL中存儲「額外」用戶數據的最佳方法?
- 26. 在MySQL中存儲測驗結果的最佳方法
- 27. 保存加密/解密密鑰的最佳方法是什麼?
- 28. 加密密碼的最佳算法
- 29. 存儲過程驗證最佳方法
- 30. 本地存儲最佳方法
存儲密碼一個MySQL數據庫或在MySQL中存儲密碼... – deceze 2011-04-01 02:00:50
您的意思是在MySQL中存儲密碼,或者存儲您的程序中需要訪問數據庫的MySQL密碼? – Sergey 2011-04-01 02:01:05
在存儲用戶密碼的表中 – PHP 2011-04-01 02:05:14