2013-01-31 31 views
1

我有一個關於SHA512哈希與C#和SQL之間的鹽的問題。什麼是最好的方式來存儲哈希值,我可以正常後,將它們保存在數據庫從Web應用程序?以後用戶登錄驗證用戶時可以安全地訪問它們嗎?我可以在SQL中使用用戶和密碼,哈希密碼並添加salt,稍後用相同的算法在c#hash中驗證用戶是否通過它的大小去除鹽,並比較兩個哈希值?在sql和web應用程序之間安全地發送密碼的最佳做法?

+2

你想保持安全嗎? HTTPS將確保客戶端和服務器之間的「純文本」密碼..並且您的服務器端代碼執行哈希..數據庫存儲散列值..這是我能想到的唯一弱點。我不確定你在問什麼具體.. –

+0

是的我明白了,但我試圖找到方法讓用戶在SQL數據庫中哈希他們的密碼根據他們在活動目錄中的密碼,但當用戶登錄網絡驗證其輸入值根據散列值內的SQL數據庫,我想我需要再次散列密碼,看看是否相等。不知道這是可能的嗎? – djedjica

回答

1

什麼是存儲哈希的最佳方式,從網絡應用程序保存在數據庫中?以後用戶登錄驗證用戶時可以安全地訪問它們嗎?

如果您使用正確的方法,如果您碰巧將所有散列轉儲到pastebin上,則不會發生任何事情;由於鹽(最好是胡椒),沒有人可以對你的哈希做任何事情(因爲它們沒有無限的時間和計算能力)。

所以,是的,你應該簡單地散列存儲在一個適當類型的數據庫列。然後在登錄後,您重新輸入輸入的純文本密碼並將其與存儲在數據庫中的密碼進行比較。

+0

謝謝,但如果我想讓用戶使用SQL而不是Web應用程序(C#),那該怎麼辦?我明白,使用相同的等SHA可以讓我來驗證輸入的值是否與分貝中的散列值相同,但鹽呢?也許,剛剛發生在我身上,如果我知道從SQL中提取數據之後我可以在C#中刪除salt並將其與散列輸入進行比較,從而得到鹽的長度? – djedjica

+0

_「如果我從SQL中提取數據後知道鹽的長度,可以在C#中刪除鹽並將其與散列輸入進行比較?」_ - 否。 – CodeCaster

+0

因此,我無法在SQL中創建用戶並在C#中以這種方式驗證它們嗎? – djedjica

3

這是一個非常複雜的話題,你應該確保你做到了正確 - 大多數人不會。

我見過的最全面的指南是Les Hazlewood的How to Secure Passwords - Developer Best Practices談話,這是我建議看作一個好開始。

這裏沒有人能夠回答你所有的問題都沒有寫一本小書,所以我只能推薦觀看這次談話,注意,解釋問題,解決方案,工具和技術,然後找到一些關於他們的更多信息。

或者你也可以外包你的用戶處理一些公司,做它正確,就像Stormpath。您也可以使用OpenIDBrowserID,根本不關心密碼。 (雖然我不會推薦使用BrowserID,但至少在可以可靠地驗證自己的服務器上的斷言之前是如此)。

相關問題