Esta é uma referência futura para mim. Desde que a pergunta está no pior caso, devemos levar em consideração quebras de linha. Enquanto o RFC 1421 define o comprimento máximo da linha como 64 caracteres, o RFC 2045 (MIME) afirma que haveria 76 caracteres em uma linha, no máximo.
O último é o que a biblioteca C # implementou. Portanto, no ambiente Windows em que uma quebra de linha é de 2 caracteres (\ r \ n), obtemos o seguinte:Length = Floor(Ceiling(N/3) * 4 * 78 / 76)
Nota: O revestimento é porque, durante o meu teste com C #, se a última linha terminar com exatamente 76 caracteres, não haverá quebra de linha.
Eu posso provar isso executando o seguinte código:
byte[] bytes = new byte[16 * 1024];
Console.WriteLine(Convert.ToBase64String(bytes, Base64FormattingOptions.InsertLineBreaks).Length);
A resposta para 16 kBytes codificados na base64 com linhas de 76 caracteres: 22422 caracteres
Suponha que seria no Linux, Length = Floor(Ceiling(N/3) * 4 * 77 / 76)
mas ainda não testei no meu núcleo .NET.