Sé lo que base64
es la codificación y cómo calcular la base64
codificación en C #, sin embargo, he visto varias veces que cuando convierto una cadena en base64, hay una =
al final.
Surgieron algunas preguntas:
- ¿Una
base64
cadena siempre termina con=
? - ¿Por qué
=
se agrega un al final?
Respuestas:
Sirve como relleno .
Una respuesta más completa es que una cadena codificada en base64 no siempre termina con un
=
, solo terminará con uno o dos=
si es necesario para rellenar la cadena a la longitud adecuada.fuente
=
. Si desea encontrar los límites, entonces siempre debe estar presente un terminador (y todavía se necesita solo un carácter). Todo el concepto de relleno de Base64 es solo un brainfart ...base64
eficientemente con ilustraciones y ejemplos. El enlace actual a wikipedia es absolutamente irrelevante como @NH. mencionado.1-no
2- Como respuesta breve: el carácter 65 (signo "=") se usa solo como complemento en el proceso final de codificación de un mensaje.
No tendrá un signo '=' si su cadena tiene un número múltiplo de 3 caracteres, porque la
Base64
codificación toma cada tres bytes (8 bits) y los representa como cuatro caracteres imprimibles en el estándar ASCII.Detalles:
(a) Si quieres codificar
ABCDEFG <=> [
ABC
] [DEF
] [G
Base64
tratará (produciendo 4 caracteres) con el primer bloque y el segundo (a medida que estén completos) pero para el tercero agregará un doble==
en la salida para completar los 4 caracteres necesarios. Por lo tanto, el resultado será QUJD REVG Rw == (sin espacio)(b) Si desea codificar ...
ABCDEFGH <=> [
ABC
] [DEF
] [GH
Del mismo modo, agregará solo uno
=
al final de la salida para obtener 4 caracteres, el resultado será QUJD REVG R0g = (sin espacio)fuente
De Wikipedia :
Por lo tanto, esto es algún tipo de relleno.
fuente
fuente
=
al final y probé esto para 1 millón de cadenas. La decodificación siempre coincidía.Se define en RFC 2045 como un carácter de relleno especial si hay menos de 24 bits disponibles al final de los datos codificados.
fuente
El signo igual (=) se usa como relleno en ciertas formas de codificación base64. El artículo de Wikipedia sobre base64 tiene todos los detalles.
fuente
Es acolchado. De http://en.wikipedia.org/wiki/Base64 :
fuente
decode(encode(A)+encode(B))=A+B
funciona con relleno pero no sin él.http://www.hcidata.info/base64.htm
Codificando "Mary tenía" a la Base 64
En este ejemplo, estamos usando una cadena de texto simple ("Mary tenía") pero el principio se mantiene sin importar cuáles sean los datos (por ejemplo, archivo de gráficos). Para convertir cada 24 bits de datos de entrada en 32 bits de salida, la codificación Base 64 divide los 24 bits en 4 fragmentos de 6 bits. El primer problema que notamos es que "Mary tenía" no es un múltiplo de 3 bytes, tiene una longitud de 8 bytes. Debido a esto, el último grupo de bits tiene solo 4 bits de longitud. Para remediar esto, agregamos dos bits adicionales de '0' y recordamos este hecho poniendo un '=' al final. Si la cadena de texto que se convertiría a Base 64 tenía 7 bytes de longitud, el último grupo habría tenido 2 bits. En este caso, habríamos agregado cuatro bits adicionales de '0' y recordar este hecho al poner '==' al final.
fuente