Это будущая ссылка для меня. Поскольку вопрос наихудший , мы должны учитывать разрывы строк. В то время как RFC 1421 определяет максимальную длину строки в 64 символа, в RFC 2045 (MIME) говорится, что в одной строке должно быть не более 76 символов.
Последнее - то, что реализовала библиотека C #. Таким образом, в среде Windows, где разрыв строки составляет 2 символа (\ r \ n), мы получаем это:Length = Floor(Ceiling(N/3) * 4 * 78 / 76)
Примечание: Flooring - потому что во время моего теста с C #, если последняя строка заканчивается ровно 76 символами, перенос строки не следует.
Я могу доказать это, запустив следующий код:
byte[] bytes = new byte[16 * 1024];
Console.WriteLine(Convert.ToBase64String(bytes, Base64FormattingOptions.InsertLineBreaks).Length);
Ответ для 16 кБайт, закодированных в base64 с 76-символьными строками: 22422 символа
Предположим, что в Linux это было бы, Length = Floor(Ceiling(N/3) * 4 * 77 / 76)
но я еще не удосужился протестировать его на своем .NET ядре.