Base64编码数据的最大大小

时间:2011-09-30 10:32:44

标签: .net security encoding base64

我有一个实现对称算法 RijndaelManaged 的安全机制。我设法使用 RijndaelManaged 查找特定IV的加密数据的最大大小。根据我的计算,它将是128个字节。但是我需要使用Base64将这128个字节转换为字符串。有没有办法计算Base64编码将用于编码大小为128的输入字节数组的最大字符数?

谢谢,帕维尔

4 个答案:

答案 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中也实现了相同的逻辑:

http://play.golang.org/p/JK9XPAle5_

答案 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个字符。