如何使用SHA512散列密码

时间:2012-04-25 21:34:36

标签: c# security encryption passwords hash

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

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

更新

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

3 个答案:

答案 0 :(得分:5)

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

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

你可以用:

进行十六进制编码
BitConverter.ToString(bytes).Replace("-","")

答案 1 :(得分: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);

但是id建议至少使用盐。

答案 2 :(得分:1)

请参阅此处的教程: http://www.obviex.com/samples/hash.aspx

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

相关问题