为什么当我';m在64字节中通过

本文关键字:字节 为什么 | 更新日期: 2023-09-27 18:22:22

我正在努力理解以下内容:

如果我声明64个字节作为数组长度(缓冲区)。当我转换成64进制字符串时,它显示长度为88。长度不应该只有64吗,因为我传递的是64字节吗?我可能完全误解了这是怎么回事。如果是,请你解释一下。

//Generate a cryptographic random number
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
// Create byte array
byte[] buffer = new byte[64];
// Get random bytes
rng.GetBytes(buffer);
// This line gives me 88 as a result. 
// Shouldn't it give me 64 as declared above?
throw new Exception(Convert.ToBase64String(buffer).Length.ToString());
// Return a Base64 string representation of the random number
return Convert.ToBase64String(buffer);

为什么当我';m在64字节中通过

否,base-64编码使用一个完整的字节来表示正在编码的数据的六位。丢失的两位是只使用字母数字、加号和斜线作为符号的代价(基本上,不包括在普通ASCII/UTF-8编码中表示不可见或特殊字符的数字)。您得到的结果是(64*4/3)四舍五入到最近的4字节边界。

Base64编码将3个八位字节转换为4个编码字符;因此

(64/3)*4≈(22*4)=88字节。

请阅读此处。

长度不应该只有64吗,因为我传递的是64字节吗?

没有。您正在以Base256表示法传递64个令牌。Base64每个令牌的信息较少,因此需要更多的令牌。88听起来不错。