SHA256给出44长度输出而不是64长度

Man*_*rni 6 c# sha256

我正在使用以下代码来执行SHA256.

public static string GenerateSaltedHash(string plainTextString, string saltString)        
        {            
            byte[] salt = Encoding.UTF8.GetBytes(saltString);
            byte[] plainText = Encoding.UTF8.GetBytes(plainTextString);
            HashAlgorithm algorithm = new SHA256Managed();

            byte[] plainTextWithSaltBytes =
              new byte[plainText.Length + salt.Length];

            for (int i = 0; i < plainText.Length; i++)
            {
                plainTextWithSaltBytes[i] = plainText[i];
            }
            for (int i = 0; i < salt.Length; i++)
            {
                plainTextWithSaltBytes[plainText.Length + i] = salt[i];
            }
            byte[] bytes = algorithm.ComputeHash(plainTextWithSaltBytes);
            return Convert.ToBase64String(algorithm.ComputeHash(plainTextWithSaltBytes));                              
        }
Run Code Online (Sandbox Code Playgroud)

由于我使用SHA256,预期结果长度为64.但是我得到了44的结果.问题是什么?44长度输出会影响安全质量吗?

wes*_*ton 9

Base-64每个字符6位(2 ^ 6 = 64).

256 bits / 6 bits per char = 42.6666 char
Run Code Online (Sandbox Code Playgroud)

由于填充,这显然最终为44(您将=在输出的末尾看到一个或两个).

您必须期望base-16(AKA十六进制),每个字符4位(2 ^ 4 = 16).

256 bits / 4 bits per char = 64 char
Run Code Online (Sandbox Code Playgroud)

对于十六进制使用:

return BitConverter.ToString(bytes).Replace("-", string.Empty);
Run Code Online (Sandbox Code Playgroud)