SHA512 计算哈希 returns 乱码
SHA512 Compute Hash returns gibberish
我正在尝试编写一个函数来计算字符串和 salt 的哈希值,但是它一直返回看起来像是某种编码值的内容,这是完全不可读的。
这是我的方法:
public string HashAndSaltString(string stringtohash, string salt)
{
byte[] data = System.Text.Encoding.ASCII.GetBytes(stringtohash + salt);
System.Security.Cryptography.SHA512 hashed = new System.Security.Cryptography.SHA512Managed();
byte[] result = hashed.ComputeHash(data);
string final = System.Text.Encoding.ASCII.GetString(result);
return final;
}
这是它的示例 returns:
?mJv?v??a ? ??v??g???s?1t?F?v?6(H????????f.???z??H??(?????
%?O??7J??p4??s=`??&p?u?6?????FX!&????????'???!|?"b??c??
?\w[??2ZB????}??_???P?&^??`r???pw?'???0a???#?!Df??????S+
我认为这与方法的 GetBytes
和 GetString
部分有关,将其编码为 ASCII?
非常感谢您的帮助。
SHA 只是为一些数据生成散列和,而不是加密它。
此程序以十六进制模式显示 SHA512 哈希和。
class Program
{
static void Main(string[] args)
{
string text = "This is random text!";
var sha = new SHA512Managed();
byte[] hash = sha.ComputeHash(Encoding.ASCII.GetBytes(text));
Console.WriteLine("Input text: " + text);
Console.WriteLine("SHA512: ");
for (int i = 0; i < hash.Length; i += 4)
{
Console.Write(" {0}{1}{2}{3} ",
Convert.ToString(hash[i], 16),
Convert.ToString(hash[i + 1], 16),
Convert.ToString(hash[i + 2], 16),
Convert.ToString(hash[i + 3], 16));
}
Console.ReadLine();
}
}
更多关于wiki
哈希函数通常将其输入处理成固定长度的字节块,这不是人类可读的。
将此字节数组转换为字符序列的常用方法是对其应用 base64。
在 C# 中你可以这样做:
string final = Convert.ToBase64String(result);
得到一个字符串,并且:
byte[]backToByteArray = Convert.FromBase64String(final);
返回一个字节数组。
我正在尝试编写一个函数来计算字符串和 salt 的哈希值,但是它一直返回看起来像是某种编码值的内容,这是完全不可读的。
这是我的方法:
public string HashAndSaltString(string stringtohash, string salt)
{
byte[] data = System.Text.Encoding.ASCII.GetBytes(stringtohash + salt);
System.Security.Cryptography.SHA512 hashed = new System.Security.Cryptography.SHA512Managed();
byte[] result = hashed.ComputeHash(data);
string final = System.Text.Encoding.ASCII.GetString(result);
return final;
}
这是它的示例 returns:
?mJv?v??a ? ??v??g???s?1t?F?v?6(H????????f.???z??H??(?????
%?O??7J??p4??s=`??&p?u?6?????FX!&????????'???!|?"b??c??
?\w[??2ZB????}??_???P?&^??`r???pw?'???0a???#?!Df??????S+
我认为这与方法的 GetBytes
和 GetString
部分有关,将其编码为 ASCII?
非常感谢您的帮助。
SHA 只是为一些数据生成散列和,而不是加密它。 此程序以十六进制模式显示 SHA512 哈希和。
class Program
{
static void Main(string[] args)
{
string text = "This is random text!";
var sha = new SHA512Managed();
byte[] hash = sha.ComputeHash(Encoding.ASCII.GetBytes(text));
Console.WriteLine("Input text: " + text);
Console.WriteLine("SHA512: ");
for (int i = 0; i < hash.Length; i += 4)
{
Console.Write(" {0}{1}{2}{3} ",
Convert.ToString(hash[i], 16),
Convert.ToString(hash[i + 1], 16),
Convert.ToString(hash[i + 2], 16),
Convert.ToString(hash[i + 3], 16));
}
Console.ReadLine();
}
}
更多关于wiki
哈希函数通常将其输入处理成固定长度的字节块,这不是人类可读的。
将此字节数组转换为字符序列的常用方法是对其应用 base64。
在 C# 中你可以这样做:
string final = Convert.ToBase64String(result);
得到一个字符串,并且:
byte[]backToByteArray = Convert.FromBase64String(final);
返回一个字节数组。