2012-12-05 32 views
-2

可能重複:
How do you use bcrypt for hashing passwords in PHP?問題使用PHP,MySQLi的登錄應用程序

我想按照這個教程創建使用PHP和庫MySQLi安全登錄程序:Link To Tutorial 教程正在使用具有5個字段的表格(成員):「id」,「username」,「email」,「password」和「salt」。 但在最開始就爲這是困惑我

INSERT INTO `secure_login`.`members` VALUES(1, 'test_user', '[email protected]', 
00807432eae173f652f2064bdca1b61b290b52d40e429a7d295d76a71084aa96c0233b82f1feac45 
529e0726559645acaed6f3ae58a286b9f075916ebf66cacc', 'f9aab579fc1b41ed0c44fe4ecdbfc 
db4cb99b9023abb241a6db833288f4eea3c02f76e0d35204a8695077dcf81932aa59006423976224be0 
390395bae152d4ef'); 

我猜拳頭長數量的SQL INSERT函數是SHA512()鹽漬密碼,所以我用這個PHP代碼生成我SHA512密碼其插入到我的會員數據庫:

$password = 'newPassword'; 
echo 'sha512: ' . hash('sha512', $password); 

,其結果是:

sha512: 6f63f637f1346149532158022899bdf424a19c3dc472e21c2068cd324d7263ed521fb1c1335afaad6bf3fd94a24c0371217086295255e7773eb8deb2c7a54e1a 

現在我的問題是什麼是的這是我的第二個值插入「鹽」字段?

難忘我找不到辦法聯繫到教程的人,但我因子評分你可能可以幫我算出這個out.so,能否請您讓我知道

  1. 我在做的SHA512密碼醃製正確?
  2. 什麼是最後一項插入成員表(鹽),我如何 可以生成一個?

感謝您的時間

+0

閱讀關於密碼學中的鹽的一些文章 – vlcekmi3

回答

3

鹽是你一個密碼,您哈希它添加到你要存儲什麼的安全性之前,混合。

也就是說:如果每個密碼都是SHA-512'd,那麼只要您知道該密碼的(SHA)散列,那麼其密碼通用的任何人都會受到危害。換句話說:只要我知道「密碼」的散列,我就知道每個使用該密碼的用戶。

所以你應該使用你的salt來使密碼哈希更安全,因此稍後將其存儲以用於重新哈希和比較(每次登錄時)。這樣每個使用「密碼」作爲密碼的人都會受到保護,因爲每個值在數據庫中都是唯一的。

那麼直接回答你的問題:

  1. 它可以使用SHA512散列的鹽,但他們並不需要是近那麼久。通常使用4至30個字符的字母數字字符串。你應該做的是把用戶輸入的密碼和你單獨生成的salt結合起來,然後對組合進行散列。
  2. 最後一個項目是鹽,一個合理的方法來使這是類似substr(str_replace('+', '.', base64_encode(sha1(microtime(true), true))), 0, 16)。這不是最好的方法,也不是唯一的方法,但它是獲得隨機鹽的簡單方法。

這些事情說,如果你不確定你在做什麼,最好不要建立一個登錄系統。有許多登錄類可以讓你的用戶比你在這裏概述的系統更安全。至少,請嘗試閱讀登錄系統上的優秀文章(如this onethis one),並盡力使用其建議。

+0

感謝大衛終於有一個有幫助的人在這裏!非常感謝您的評論 – user1760110