我有一個數據庫(MySQL的)所在的表USERS有這樣的結構:
- 用戶名( varchar)
- Passwd(varchar)
- 名稱(VARCHAR)
- BancAccount(VARCHAR)
passwd和BancAccount是對數據庫的純文本。從PHP代碼中,登錄完成後,它將UserID和Passwd的用戶輸入與數據庫的結果進行比較。
我想使它更安全,這樣如果任何人能夠進入數據庫,他都看不到這兩個關鍵字段。有什麼建議麼?
謝謝
我有一個數據庫(MySQL的)所在的表USERS有這樣的結構:
passwd和BancAccount是對數據庫的純文本。從PHP代碼中,登錄完成後,它將UserID和Passwd的用戶輸入與數據庫的結果進行比較。
我想使它更安全,這樣如果任何人能夠進入數據庫,他都看不到這兩個關鍵字段。有什麼建議麼?
謝謝
嘗試使用PHP crypt函數並使用數據庫來存儲salt,以跟進Neal所說的,確保您嘗試使用一些默默無聞的方法來隱藏它......但是,您會需要鹽以後再比較用戶輸入。
好吧,你可以用鹽密碼散列。並且對於與該表格有聯繫的銀行賬戶有一個完全獨立的表格,但是非常模糊。
你絕對不應該存儲在普通的密碼,但只是它的哈希,充其量只是一個salted hash。
您使用哪種散列函數以及如何選擇鹽也是一個重要問題。 Many people suggest to use bcrypt as the hash function for passwords,它具有一個成本參數來調整生成哈希值的計算成本(較長的強力攻擊將持續的成本越高)。鹽應該是隨機值並且對於每個密碼都是唯一的。
我建議把一個包含密碼的集中字符串放在一起;也稱爲「Salt and Pepper」密碼,然後使用SHA1對其進行加密。然後在檢查數據庫字段時使用相同的算法。
$salt = "a7s8as98sa9";
$pepper = date("H");
$hash = sha1($salt . $password . $pepper);
使用等隨機產生的字符串,數字,日期或時間戳動態鹽是僅創造力的冰山一角。
我可以問這個鹽和胡椒概念來自哪裏嗎?到目前爲止,我從來沒有聽說過或見過(並且足以說我對這個主題做了很多研究)。你能指出我對這個問題的任何權威來源嗎? – ircmaxell 2011-04-28 18:06:27
哈希是好的。默默無聞的安全。我會忽略這個答案的第二部分。 – Thilo 2011-04-28 17:26:18