Esta es una referencia futura para mí. Como la pregunta es sobre el peor de los casos, debemos tener en cuenta los saltos de línea. Mientras que RFC 1421 define la longitud máxima de la línea como 64 caracteres, RFC 2045 (MIME) establece que habría 76 caracteres como máximo en una línea.
Esto último es lo que ha implementado la biblioteca C #. Entonces, en un entorno de Windows donde un salto de línea es de 2 caracteres (\ r \ n), obtenemos esto:Length = Floor(Ceiling(N/3) * 4 * 78 / 76)
Nota: El piso se debe a que durante mi prueba con C #, si la última línea termina exactamente en 76 caracteres, no se produce un salto de línea.
Puedo probarlo ejecutando el siguiente código:
byte[] bytes = new byte[16 * 1024];
Console.WriteLine(Convert.ToBase64String(bytes, Base64FormattingOptions.InsertLineBreaks).Length);
La respuesta para 16 kBytes codificados en base64 con líneas de 76 caracteres: 22422 caracteres
Suponga que en Linux lo sería, Length = Floor(Ceiling(N/3) * 4 * 77 / 76)
pero todavía no he podido probarlo en mi núcleo .NET.