2011-12-01 225 views
4

我正在創建一個方法,我將使用哈希密碼來存儲在數據庫中。如果我的散列方法足以滿足任務的需要或者過度消耗,我想尋求建議。使用SHA256 + SHA512散列密碼?

Dim result As Byte() 
    Dim mixer As String 

    Try 
     Dim sha As New SHA512CryptoServiceProvider 

     mixer = txt_salt.Text.ToUpper + txt_pass.Text.Trim 
     result = sha.ComputeHash(System.Text.Encoding.ASCII.GetBytes(mixer)) 

     txt_sha.Text = Convert.ToBase64String(result) 
    Catch ex As Exception 
     MsgBox(ex.ToString) 
    End Try 

謝謝。

回答

5

這是不夠的。

  1. 無鹽:
  2. 哈希太快:
    • 弱勢羣體暴力破解(如果哈希泄露)
    • 最哈希算法被設計成快速
    • 解決方案:bcryptscrypt或多個(多!)輪
  3. 沒有HMAC:
    • 沒有額外的 「服務器祕密」
    • 溶液(存儲外分貝!):hmac-sha1
  4. 進行驗證,以及測試的庫/框架的一部分不:
    • 這是一個「滾你自己的」實施
    • 解決方案:不要重新發明輪子,除非它是thesethese一個:)

至於「位」去,SHA1是與160完全細(但它是不精[本身]出於其它原因)。做兩個SHA256 + SH512只是使零增益的事情複雜化。 (其實,這是由於額外的存儲需求非常輕微的淨虧損。)

我建議用現有的庫/系統,除非這是一個學術項目:)

編碼愉快。

+0

你能詳細說說你對#3的意思嗎? –

+0

@Mr。現在#4 ;-)安全不是輕易掉以輕心。使用項目/圖書館*設計*來解決這個問題 - 也就是說,這個圖書館沒有其他目的。這個庫應該有一個可靠的設計(包括其他要點),並且應該經過很好的測試,不應該有已知的安全漏洞。查看錯誤報告(以及解決問題的時間)通常表示爲此目的的庫的質量。 – 2011-12-01 07:19:57

+0

我在編程的安全方面有點新,你能推薦一個我可以使用的.net框架中的現有庫嗎? –