2

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

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

更新

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

4

3 回答 3

5

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

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

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

BitConverter.ToString(bytes).Replace("-","")
于 2012-04-25T21:56:51.130 回答
1

你确定它说 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);

但我建议至少使用盐。

于 2012-04-25T21:50:47.307 回答
1

请在此处查看教程: http ://www.obviex.com/samples/hash.aspx

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

于 2016-05-30T15:04:16.380 回答