2011-04-28 180 views
2

可能重複:
Best way to store password in database保護密碼字段在數據庫

我有一個數據庫(MySQL的)所在的表USERS有這樣的結構:

  • 用戶名( varchar)
  • Passwd(varchar)
  • 名稱(VARCHAR)
  • BancAccount(VARCHAR)

passwd和BancAccount是對數據庫的純文本。從PHP代碼中,登錄完成後,它將UserID和Passwd的用戶輸入與數據庫的結果進行比較。

我想使它更安全,這樣如果任何人能夠進入數據庫,他都看不到這兩個關鍵字段。有什麼建議麼?

謝謝

回答

2

嘗試使用PHP crypt函數並使用數據庫來存儲salt,以跟進Neal所說的,確保您嘗試使用一些默默無聞的方法來隱藏它......但是,您會需要鹽以後再比較用戶輸入。

PHP Crypt()

2

好吧,你可以用鹽密碼散列。並且對於與該表格有聯繫的銀行賬戶有一個完全獨立的表格,但是非常模糊。

+1

哈希是好的。默默無聞的安全。我會忽略這個答案的第二部分。 – Thilo 2011-04-28 17:26:18

2

你絕對不應該存儲在普通的密碼,但只是它的哈希,充其量只是一個salted hash

您使用哪種散列函數以及如何選擇鹽也是一個重要問題。 Many people suggest to use bcrypt as the hash function for passwords,它具有一個成本參數來調整生成哈希值的計算成本(較長的強力攻擊將持續的成本越高)。鹽應該是隨機值並且對於每個密碼都是唯一的。

0

我建議把一個包含密碼的集中字符串放在一起;也稱爲「Salt and Pepper」密碼,然後使用SHA1對其進行加密。然後在檢查數據庫字段時使用相同的算法。

$salt = "a7s8as98sa9"; 
$pepper = date("H"); 

$hash = sha1($salt . $password . $pepper); 

使用等隨機產生的字符串,數字,日期或時間戳動態鹽是僅創造力的冰山一角。

+0

我可以問這個鹽和胡椒概念來自哪裏嗎?到目前爲止,我從來沒有聽說過或見過(並且足以說我對這個主題做了很多研究)。你能指出我對這個問題的任何權威來源嗎? – ircmaxell 2011-04-28 18:06:27