2011-08-07 21 views
2

我正在做一個註冊表單,我唯一的疑問是如何處理密碼(如何將它們插入MySQL數據庫)。我沒有絲毫的想法如何去做,什麼樣的列必須是Passwords,我是否必須以某種方式對它們進行加密,等等。你能提供一個基本的例子和解釋,以便我能夠做到嗎?將密碼插入數據庫,與常規文本字段有什麼不同?

+0

char \ varchar並且應該被散列和醃製 – 2011-08-07 23:54:39

回答

2

您不想以明文形式存儲密碼。你甚至不想知道密碼是什麼。因此,您將密碼的散列存儲在數據庫中。當用戶想要登錄時,您會散列他正在嘗試登錄的密碼,然後將其與數據庫中的散列進行比較。任何嚴重的密碼存儲系統進一步鹽散列,以防止彩虹表攻擊的密碼(谷歌)。由於這是一個相當複雜的話題,你顯然根本沒有經驗,所以我建議你使用phpass來散列和密碼,而不必擔心實現細節。 phpass網站也有關於該主題的一些很好的介紹性文章。 Here's another one,讓它非常簡單。

至於數據庫,這只是一個正常的VARCHAR字段,足以容納散列。

-1

它可以完成的方法之一是使用md5。您將密碼轉換爲md5並將其放入數據庫(md5加密是單向的),當用戶再次登錄時,您再次轉換填寫的密碼並檢查轉換後的密碼是否在數據庫中找到的某處用戶名通常)。

編輯

你可以做一個字符串轉換成MD5串這樣的:

$converted_pass = md5($unconverted_pass); 

然而,你將需要你用它加密之前,所謂的鹽鍵添加到密碼MD5。這是一組字母/數字等。如果你這樣做,每次你會有相同的結果,但它會相當安全:)

+0

如果你不加鹽,你可以像純文本那樣存儲 – 2011-08-08 00:02:03

+0

這是真的。對不起,=忘了=(你需要確實加鹽它 – Manuel

0

你不應該存儲密碼,密碼散列只。 選擇hasfunction後應該選擇數據庫類型。
對於md5/sha512這將是CHAR(32)如果你將保持十六進制表示

查詢是這樣的:

"INSERT INTO users SET otherFields,pass_hash='".hashFunc($_POST['password']."'; 

其中hashFunc生成散列前

function hashFunc($pass){ 
    $salt='something'; 
    md5($salt . $pass); 
} 
+0

雖然這不是最好的答案,但它不值得贊同+1 –

+1

如果以明文形式存儲密碼就像將門敞開一樣,MD5就像關上門,看起來很安全,直到小偷打開它。停止推薦MD5。使用bcrypt。 –

0

安全保護密碼的唯一方法是使用摩爾定律哈希函數。使用bcrypt

相關問題