2010-12-02 221 views
2

我正在開發一個用戶必須登錄的Web服務。我將通過PHP將用戶數據存儲在SQL數據庫和輸入/輸出中。但我不想公開存儲它。如何在PHP中加密密碼,以便只有知道密碼的人才能解鎖密碼?安全密碼存儲

我知道像phpBB這樣的服務使用某種隱藏/加密存儲的密碼。

回答

3

最簡單的方法來獲得您的密碼存儲方案是安全的使用標準庫

由於安全性往往比許多程序員可以獨自解決的問題複雜得多,並且存在更多無形的可能性,所以使用標準庫幾乎總是最簡單和最安全(如果不是唯一的話)可用選項。

更多信息,請參見this answer

0

你可能想散列密碼 - 不加密它。 Check out SHA-1。散列意味着您無法像使用加密一樣檢索原始數據。相反,你所做的是對用戶輸入進行散列,並將其與數據庫中的散列進行比較,以查看他們是否擁有正確的密碼。這樣做會增加安全性,就好像數據庫已經被破壞一樣 - 一堆哈希值是無用的。

+0

也是如此SHA1 http://www.phocean.net/2009/05/10/sha-1-vulnerable-consider-sha-2。html – 2010-12-02 12:18:55

5

您需要使用適當的安全算法來加密和散列密碼。

+0

我認爲你的意思是mhash庫。 – rook 2010-12-02 17:11:22

+0

@對,對不起。深夜:) – 2010-12-02 20:34:04

0

保存一個MD5哈希,並使其更安全,添加鹽。

+2

MD5不再被建議爲漏洞已被發現,因此我的SHA1建議 – 2010-12-02 12:15:28

+2

它仍然是社區腳本等的有效散列,與鹽一起使用它是一樣好所有散列 – Breezer 2010-12-02 12:19:18

+1

不正確。請使用sha256或更高版本。 http://www.md5decrypter.com/ – DampeS8N 2010-12-02 12:48:47

-1

有哈希密碼(最好用食鹽)的可能性:

$salt = random_string($length = 5); 
$hash = $salt . sha1($salt . $password); 

或存儲加密的(只有當你的MySQL連接是SSL加密):

INSERT INTO `user` (`user`,`pass`) VALUES("username",ENCRYPT("password","secretkey")) 
0

好了,你不應該用MD5加密它們(這不是真正的安全,大多數黑客都有轉換表)。

因此,您可以使用SHA1(通常使用)對其進行哈希處理。

如果您想了解更多的安全性,你可以添加更多的salt這是一個關鍵您可以添加像這樣(只是舉個例子,通常使用):

salt+sha1(salt+pass) 

這種組合可以與許多語言使用。

0

在SHA-1(sha1 php內置函數)中進行散列密碼與幾次鹽析遞歸(上述答案中的代碼相同,只循環幾次)。這應該是足夠的保護,所以即使入侵者以某種方式得到他們的手上的哈希,他們不應該能夠破解他們...