我有一个实现对称算法 RijndaelManaged 的安全机制。我设法使用 RijndaelManaged 查找特定IV的加密数据的最大大小。根据我的计算,它将是128个字节。但是我需要使用Base64将这128个字节转换为字符串。有没有办法计算Base64编码将用于编码大小为128的输入字节数组的最大字符数?
谢谢,帕维尔
答案 0 :(得分:13)
绝对 - Base64需要4个字符来表示每3个字节。 (填充适用于二进制数据,它不是3个字节的精确倍数。)因此128个字节总是172个字符。 (解决这个问题的方法是base64代表每个字符中的6位(2 6 = 64);因此3个字节= 24位= 4个base-64个字符。)
答案 1 :(得分:5)
base 64编码的字符串将每3个字节(或其中的一部分)使用4个字符。因此,128个字节将是172个基本的64个字符。
答案 2 :(得分:0)
如果需要以编程方式检查,可以通过检查模数来检查。这是一些psudocode(没有特定的语言):
function base64Inflation (numBytes) minimumBase64Bytes = roundDown(numBytes / 3 * 4) modulus = numberOfBytes % 3 // Assuming % is the modulo operator if modulus == 0 return minimumBase64Bytes // Exact fit! No padding required. else return minimumBase64Bytes + 4 // Doesn't quite fit. We need to pad.
我在golang中也实现了相同的逻辑:
答案 3 :(得分:0)
在 Java :
中byte[] bytes = new byte[128];
int base64Length = bytes.length / 3 * 4; // Strictly integer division
if (bytes.length % 3 != 0)
{
base64Length += 4; // Extra padding characters will be added
}
System.out.println(bytes.length + " bytes will be encoded in " + base64Length + " characters.");
因此,在输入bytes.length == 128
的位置,输出将为base64Length == 172
个字符。