作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我不知道我是不是在问一个愚蠢的问题,但我想知道 .NET 中的 Convert.ToBase64String 函数返回的长度与其源字节大小相同还是不同?我想尝试 MSDN 本身的文章 How To: Use Forms Authentication with SQL Server 2000散列我的密码,但我发现他们用来创建盐字符串的函数返回的长度比它应该返回的长度多 3 个。此处澄清的是那篇文章中的代码。
private static string CreateSalt(int size)
{
// Generate a cryptographic random number using the cryptographic
// service provider
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
byte[] buff = new byte[size];
rng.GetBytes(buff);
// Return a Base64 string representation of the random number
return Convert.ToBase64String(buff);
}
最佳答案
不,Base64 为 3 字节输入返回 4 字节输出,四舍五入(用 = 填充)到下一个 4 字节边界。
int outputLength = ((inputLength+2)/3)*4
那是因为它每个字节仅使用 6 位(基本上是数字 0-63),以便仅使用不属于控制字符且在 7 位范围内的 ASCII 字符。因此,当使用 Base64 编码数据时,您将得到 3*8 => 4*6 位。
关于c# - Convert.ToBase64String 是否返回与其源字节数组相同的长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/855302/
我是一名优秀的程序员,十分优秀!