【问题标题】:C#/Java/Ruby - Hash Alogrthym for Passwords - Cross-Lang/PlatformC#/Java/Ruby - 密码的哈希算法 - 跨语言/平台
【发布时间】:2011-03-23 05:57:54
【问题描述】:

什么是从 C# 中使用的好的密码哈希算法,如果稍后您可能知道 Java 和 Ruby 程序可能还需要“登录”/验证用户。 .NET 中开箱即用的任何东西,可以很好地翻译成其他语言并且易于使用。

【问题讨论】:

标签: c# java ruby cross-platform hash


【解决方案1】:

NSA/NIST 标准化的最强加密哈希算法是 SHA-512。

确保使用每个密码的随机盐(由强大的加密随机数生成器生成的 128 位盐很好)。或者,更好的是,确保使用每个密码的随机密钥(同样由加密随机生成),并使用 HMAC-SHA-512。请务必使用多次迭代 - 4096 和 65,536 是很好的整数(2^12 和 2^16)。

let h = get_hash_hunction("SHA-512")
let k = get_key_for_user("Justice")
let hmac = get_hmac(h, k)
let test = get_bytes("utf-8", http_request_params["password"])
for(i in 0 .. (2^16 - 1))
    let test = run_hmac(hmac, test)
return test == get_hashed_password_for_user("Justice")

【讨论】:

    【解决方案2】:

    正确使用添加了盐的 MD5 会使彩虹表和蛮力相当昂贵。因此,使用 md5 的评论非常有效。

    【讨论】:

      【解决方案3】:

      认为 MD5 是最常见的。

      【讨论】:

      • MD5 被过度使用并且太容易被简单的数据库驱动生成器逆转,这些生成器存储了相当于数千个密码的 MD5。
      猜你喜欢
      • 1970-01-01
      • 2011-10-10
      • 1970-01-01
      • 1970-01-01
      • 2010-10-22
      • 2020-09-16
      • 2012-05-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多