Максимальный размер закодированных данных Base64 - PullRequest
6 голосов
/ 30 сентября 2011

У меня есть механизм безопасности, который реализует симметричный алгоритм RijndaelManaged . Мне удалось найти информацию о том, каков максимальный размер зашифрованных данных, используя RijndaelManaged для конкретного IV. По моим подсчетам это будет 128 байт. Однако мне нужно преобразовать эти 128 байтов в строку, используя Base64. Есть ли способ рассчитать максимальное количество символов, которое будет использовать кодировка Base64 для кодирования входного байтового массива размером 128?

Спасибо, Pawel

Ответы [ 4 ]

14 голосов
/ 30 сентября 2011

Абсолютно - Base64 занимает 4 символа для представления каждые 3 байта. (Заполнение применяется для двоичных данных, которые не являются точным кратным 3 байтам.) Таким образом, 128 байтов всегда будут 172 символами. (Способ решения этой проблемы заключается в том, что base64 представляет 6 бит в каждом символе (2 6 = 64); следовательно, 3 байта = 24 бита = 4 символа base-64.)

5 голосов
/ 30 сентября 2011

Базовая 64-кодированная строка будет использовать 4 символа на каждые 3 байта (или их часть). Таким образом, 128 байтов будут 172 базовыми 64 символами.

0 голосов
/ 07 мая 2014

В 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 символов.

0 голосов
/ 15 сентября 2013

Если вам нужно проверить это программно, вы можете сделать это, проверив модуль. Вот некоторый псевдокод (без определенного языка):

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_

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...