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+

我认为这与方法的 GetBytesGetString 部分有关,将其编码为 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);

返回一个字节数组。