【问题标题】:How to hash a password with SHA512如何使用 SHA512 对密码进行哈希处理
【发布时间】:2012-05-06 15:18:47
【问题描述】:

在我之前的问题中,有人告诉我要散列密码而不是加密,结果证明这是正确的。问题是,我以前从未处理过散列密码,所有文档都说我尝试在测试帐户上使用的 SHA512 无济于事。我不知道从这里去哪里。代码 cmets 给了我他们所说的示例“加密”字符串,它是“FA35A0194E3BE7024CEFB1839CBFC922”,我不确定如何使用 SHA512 对其进行格式化,因为它所需要和返回的只是一个字节数组或来自ComputeHash()方法:

byte[] hashedPassword = HashAlgorithm.Create("SHA512").ComputeHash( ??? );

更新

我尝试在字节上打印出 UTF8Encoding.GetString,但它只显示一堆废话字符,看起来与示例文档中的字符完全不同。

【问题讨论】:

  • 不清楚你到底在问什么。您是否要求我们帮助您学习如何在 C# 中使用 SHA512 类?您可以从此处的 MSDN 文档开始:msdn.microsoft.com/en-us/library/…
  • OK asawyer,我会编辑这个...
  • 嗨 asawyer,这够好吗?

标签: c# security encryption passwords hash


【解决方案1】:

使用普通 SHA-512 散列仍然是错误的。使用通过Rfc2898DeriveBytes 公开的PBKDF2。

它返回原始字节,您应该使用 hex 或 base64 对其进行编码。

您可以使用以下方式进行十六进制编码:

BitConverter.ToString(bytes).Replace("-","")

【讨论】:

  • 呃...我正在尝试使用一个需要这个 SHA512 散列函数的垃圾遗留系统,我在之前的问题中认为这是加密 - 我只是不知道如何获取文本基于字节!
  • @james 要从 byte[] 获取字符串,您需要使用编码,例如:string data = new UTF8Encoding(false).GetString(bytes);
  • @Igor 因为普通的 SHA-512 很快。密码散列最重要的威胁是猜测许多潜在的密码。如果您将哈希迭代 10k 次,那么破解的成本会增加 10k 倍。 PBKDF2本质上就是这样一个迭代的哈希函数。
【解决方案2】:

你确定它说的是 512,因为那是 128,但无论如何你可以使用类似的东西

System.String Hashed = System.BitConverter.ToString(((System.Security.Cryptography.SHA512)new System.Security.Cryptography.SHA512Managed()).ComputeHash(System.Text.Encoding.ASCII.GetBytes("NotHashedPass"))).Replace("-","");

MessageBox.Show(Hashed);

但我建议至少使用盐。

【讨论】:

  • 现在你明白我为什么在这里感到困惑了吗?
  • @godzcheater 如何将该行分成变量。当您试图帮助某人理解某事时,制作一个衬里没有任何积分。
  • @Savage 如果您看到原始问题,您会知道他不知道他的任何代码剂量,但是,`System.Security.Cryptography.SHA512 SHA512 = new System.Security.Cryptography.SHA512Managed (); System.Byte[] Hash = SHA512.ComputeHash(System.Text.Encoding.ASCII.GetBytes("NotHashedPass"));// 如果要添加盐,只需执行 "NotHashedPass" + "SaltHere" System.String HashStr = System.BitConverter.ToString(Hash).Replace("-", ""); MessageBox.Show(HashStr);`
【解决方案3】:

请看这里的教程: http://www.obviex.com/samples/hash.aspx

来自教程: “这些代码示例演示了如何散列数据和验证散列。它支持多种散列算法。为了帮助降低字典攻击的风险,代码在生成散列之前将随机字节(所谓的盐)添加到原始纯文本中并附加它们到生成的密文(哈希验证需要原始盐值)。生成的密文是base64编码的。重要提示:数据哈希不能被解密回纯文本“

【讨论】:

    猜你喜欢
    • 2019-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-16
    • 1970-01-01
    • 1970-01-01
    • 2014-01-10
    相关资源
    最近更新 更多