Se um servidor recebeu uma string base64 e quis verificar seu comprimento antes da conversão, diga que sempre desejava permitir que a matriz de bytes final tivesse 16 KB. Qual o tamanho possível de uma matriz de 16 KB de bytes quando convertida em uma string Base64 (assumindo um byte por caractere)?
166
ceil
comfloat
números ou apenasint
números. (e nãoceil
)Da Wikipedia
Portanto, 16kb * 4/3 fornece muito pouco mais de 21,3 'kb, ou 21848 bytes, para ser exato.
Espero que isto ajude
fonte
16kb é 131.072 bits. O Base64 empacota buffers de 24 bits em quatro caracteres de 6 bits cada, para que você tenha 5.462 * 4 = 21.848 bytes.
fonte
Como a pergunta foi sobre o pior aumento possível, devo acrescentar que geralmente há quebras de linha em torno de cada 80 caracteres. Isso significa que, se você estiver salvando dados codificados em base64 em um arquivo de texto no Windows, ele adicionará 2 bytes, no Linux, 1 byte para cada linha.
O aumento da codificação real foi descrito acima.
fonte
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:
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.fonte