2011-11-02 78 views
0

我有一個C#應用程序,我想寫一個基本的登錄表單使用PHP和MySQL來存儲密碼。比較密碼與隨機鹽

我使用SHA512 +隨機鹽來存儲密碼所以目前我在做這個密碼。

散列(密碼+ randomSalt)+ randomSalt;

所以salt被附加到散列,然後發送到服務器並存儲。

現在我的問題是比較有人試圖登錄。用戶不知道鹽,我不想發送純文本密碼到服務器,所以我有點卡住了。

我應該加密密碼,並將其發送到服務器,讓服務器發送用戶的鹽還是有實現這個更好的辦法?

我只是想確保任何提供帳戶密碼的人都是中等安全的。

在此先感謝

+1

考慮使用用戶標識符作爲鹽,這樣你實際上可以重新創建散列。 –

回答

1

在一般情況下,你應該存儲在數據庫中的哈希密碼和隨機鹽值。

當用戶認證時,他或她的用戶名和密碼被髮送到服務器(優選地,通過SSL安全連接)。在那裏,你使用用戶名從數據庫中檢索鹽值和哈希密碼來做比較。

底線是,你永遠不應該存儲明文密碼或送他們通過不安全的連接。

有關更多信息,請參閱Password hashing, salt and storage of hashed values

+0

不錯的參考鏈接! –

0

這幾乎是不可能的。就像Derek說的那樣,正確的做法是獲得一個SSL證書併發送純文本密碼。

醃製是爲了防止竊取的密碼數據庫泄露每個人的密碼。但是,如果散列步驟在客戶端上完成,則數據庫中的值是通過網絡發送的確切字符串。

如果你真的不能使用SSL,http://en.wikipedia.org/wiki/Challenge-response_authentication#Cryptographic_techniques描述的方式,以避免發送密碼(或哈希值,這幾乎是一樣的)。