我想了解以下内容:
如果我声明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);
解决方法
不,base-64编码使用整个字节来表示被编码的数据的六位.丢失的两位是仅使用字母数字,加号和斜杠作为符号的价格(基本上,不包括代表不可见的数字或纯ASCII / UTF-8编码中的特殊字符).得到的结果是(64 * 4/3)四舍五入到最接近的4字节边界.