SHA256给出44长度输出而不是64长度
我正在使用以下代码来执行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)); }
当我使用SHA256时,预期结果长度为64.但是我得到了44的结果。问题是什么? 44长度输出会影响安全质量吗?
Base-64每个字符6位(2 ^ 6 = 64)。
256 bits / 6 bits per char = 42.6666 char
由于填充,这显然最终为44(您将在输出结尾看到一个或2 =
)。
你必须期望base-16(AKAhex),每个字符4位(2 ^ 4 = 16)。
256 bits / 4 bits per char = 64 char
对于hex使用此 :
return BitConverter.ToString(bytes).Replace("-", string.Empty);