2011-12-01 64 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框架中的现有库吗? –