SHA256 给出 44 长度输出而不是 64 长度
SHA256 giving 44 length output instead 64 length
我正在使用以下代码执行 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。
这是什么问题?较短的输出长度会影响安全性吗?
Base-64 是每个字符 6 位 (2^6 = 64)。
256 bits / 6 bits per char = 42.6666 char
由于填充,这显然最终为 44(您将在输出末尾看到一个或 2 个 =
)。
您一定期待 base-16(也称为十六进制),即每个字符 4 位 (2^4 = 16)。
256 bits / 4 bits per char = 64 char
十六进制使用 this:
return BitConverter.ToString(bytes).Replace("-", string.Empty);
我正在使用以下代码执行 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。
这是什么问题?较短的输出长度会影响安全性吗?
Base-64 是每个字符 6 位 (2^6 = 64)。
256 bits / 6 bits per char = 42.6666 char
由于填充,这显然最终为 44(您将在输出末尾看到一个或 2 个 =
)。
您一定期待 base-16(也称为十六进制),即每个字符 4 位 (2^4 = 16)。
256 bits / 4 bits per char = 64 char
十六进制使用 this:
return BitConverter.ToString(bytes).Replace("-", string.Empty);