使用SHA256 + SHA512哈希密码?

时间:2011-12-01 07:12:50

标签: vb.net security passwords

我正在创建一个方法,用于散列密码以存储在数据库中。如果我的哈希方法对于任务来说足够或过度,我想寻求建议。

    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

感谢。

1 个答案:

答案 0 :(得分:5)

不足。

  1. 无盐:
    • 易受rainbow tables攻击(如果哈希泄漏)
    • 解决方案:在大型域中使用随机 salt
  2. 哈希太快了:
    • 易受蛮力影响(如果哈希泄漏)
    • 大多数哈希算法都设计为 fast
    • 解决方案:bcryptscrypt或多个(很多!!!)回合
  3. 没有HMAC:
    • 没有额外的“服务器密钥”(存储在db之外!)
    • 解决方案:hmac-sha1
  4. 不是经过充分测试的身份验证库/框架的一部分:
    • 这是一个“滚动你自己”的实现
    • 解决方案:不要重新发明轮子,除非它是thesethese之一:)
  5. 就“位”而言,SHA1完全没有160(但由于其他原因,它本身并不好)。同时执行SHA256 + SH512会使零增益的问题复杂化。 (实际上,由于额外的存储要求,这是一个非常轻微的净损失。)

    我建议使用现有的图书馆/系统,除非这是一个学术项目:)

    快乐的编码。