Si un servidor recibió una cadena base64 y quería verificar su longitud antes de la conversión, digamos que siempre permitió que la matriz de bytes final fuera de 16 KB. ¿Qué tan grande podría llegar a ser una matriz de bytes de 16 KB cuando se convierte en una cadena Base64 (suponiendo un byte por carácter)?
167
ceil
confloat
números, o sóloint
números. (y noceil
)De Wikipedia
Entonces 16kb * 4/3 da muy poco más de 21.3 'kb, o 21848 bytes, para ser exactos.
Espero que esto ayude
fuente
16kb son 131,072 bits. Base64 empaqueta memorias intermedias de 24 bits en cuatro caracteres de 6 bits cada uno, por lo que tendría 5,462 * 4 = 21,848 bytes.
fuente
Dado que la pregunta era sobre el peor aumento posible, debo agregar que generalmente hay saltos de línea alrededor de cada 80 caracteres. Esto significa que si está guardando datos codificados en base64 en un archivo de texto en Windows, agregará 2 bytes, en Linux 1 byte para cada línea.
El aumento de la codificación real se ha descrito anteriormente.
fuente
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:
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.fuente