我正在做一個註冊表單,我唯一的疑問是如何處理密碼(如何將它們插入MySQL數據庫)。我沒有絲毫的想法如何去做,什麼樣的列必須是Passwords
,我是否必須以某種方式對它們進行加密,等等。你能提供一個基本的例子和解釋,以便我能夠做到嗎?將密碼插入數據庫,與常規文本字段有什麼不同?
回答
您不想以明文形式存儲密碼。你甚至不想知道密碼是什麼。因此,您將密碼的散列存儲在數據庫中。當用戶想要登錄時,您會散列他正在嘗試登錄的密碼,然後將其與數據庫中的散列進行比較。任何嚴重的密碼存儲系統進一步鹽散列,以防止彩虹表攻擊的密碼(谷歌)。由於這是一個相當複雜的話題,你顯然根本沒有經驗,所以我建議你使用phpass來散列和密碼,而不必擔心實現細節。 phpass網站也有關於該主題的一些很好的介紹性文章。 Here's another one,讓它非常簡單。
至於數據庫,這只是一個正常的VARCHAR
字段,足以容納散列。
它可以完成的方法之一是使用md5。您將密碼轉換爲md5並將其放入數據庫(md5加密是單向的),當用戶再次登錄時,您再次轉換填寫的密碼並檢查轉換後的密碼是否在數據庫中找到的某處用戶名通常)。
編輯
你可以做一個字符串轉換成MD5串這樣的:
$converted_pass = md5($unconverted_pass);
然而,你將需要你用它加密之前,所謂的鹽鍵添加到密碼MD5。這是一組字母/數字等。如果你這樣做,每次你會有相同的結果,但它會相當安全:)
如果你不加鹽,你可以像純文本那樣存儲 – 2011-08-08 00:02:03
這是真的。對不起,=忘了=(你需要確實加鹽它 – Manuel
你不應該存儲密碼,密碼散列只。 選擇hasfunction後應該選擇數據庫類型。
對於md5
/sha512
這將是CHAR(32)如果你將保持十六進制表示
查詢是這樣的:
"INSERT INTO users SET otherFields,pass_hash='".hashFunc($_POST['password']."';
其中hashFunc生成散列前
function hashFunc($pass){
$salt='something';
md5($salt . $pass);
}
雖然這不是最好的答案,但它不值得贊同+1 –
如果以明文形式存儲密碼就像將門敞開一樣,MD5就像關上門,看起來很安全,直到小偷打開它。停止推薦MD5。使用bcrypt。 –
安全保護密碼的唯一方法是使用摩爾定律哈希函數。使用bcrypt!
- 1. Orchard CMS輸入字段與文本字段有什麼不同?
- 2. 如何將文本字段密碼與數據庫md5密碼進行比較。
- 3. 爲什麼輸入的文本和密碼字段不對齊?
- 4. 插入文本字段與PHP和HTML數據庫
- 5. 批量插入犯規插入數據文本導入日期字段
- 6. 從文本字段插入數據到SQLite數據庫
- 7. javascript:從數據庫插入數據到html5文本字段
- 8. 什麼都沒有插入數據庫?
- 9. 我有什麼選擇將數據插入非規格化表
- 10. 使用RSACryptoServiceProvider類將加密密碼插入數據庫?
- 11. JPA不插入數據庫,爲什麼?
- 12. (Rails + Devise)將數據插入數據庫並填充密碼
- 13. 這個Javascript代碼將數據插入Web SQL數據庫有什麼問題?
- 14. 將html文本插入數據庫
- 15. 爲什麼我的代碼不能將數據插入數據庫?
- 16. 爲什麼我的代碼不會在mysql中將數據插入數據庫?
- 17. 有什麼方法可以將數據從文本文件插入數據集?
- 18. 在WCF下運行代碼與「常規」代碼執行,有什麼不同?
- 19. 保護密碼字段在數據庫
- 20. 笨插入多個圖片到不同的數據庫字段
- 21. 爲什麼不將數據插入MySQL?
- 22. 數據庫規範化 - 相同的字段,不同的表
- 23. 密碼字段與Asp.Net動態數據
- 24. 密碼文本字段
- 25. 爲什麼分配給mongo文檔字段有時不會進入數據庫?
- 26. Android:AutoCompleteTextView搜索不同的字段然後在文本視圖中插入什麼
- 27. 如何文本字段值插入到數據庫在C#以下代碼
- 28. Laravel將用戶輸入的純文本密碼與外部數據庫加密密碼進行比較
- 29. PHP:爲什麼我的代碼不能插入數據庫
- 30. 如何將int NULL插入到數字數據庫字段中?
char \ varchar並且應該被散列和醃製 – 2011-08-07 23:54:39