encoding - b64 - ¿Por qué una cadena codificada en base64 tiene un signo=al final?
encoding b64 (8)
- No.
- Para rellenar la cadena codificada en Base64 a un múltiplo de 4 caracteres de longitud, para que pueda decodificarse correctamente.
Sé qué es la codificación base64
y cómo calcular la codificación base64
en C #, sin embargo, he visto varias veces que cuando convierto una cadena en base64, hay un =
al final.
Algunas preguntas surgieron:
- ¿Una cadena
base64
siempre termina con=
? - ¿Por qué an
=
se anexa al final?
1-No
2- Como respuesta breve: el 65.o carácter (el 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 de múltiplo de 3 caracteres, porque la codificación Base64
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 (cuando 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 quieres codificar ...
ABCDEFGH <=> [ ABC
] [ DEF
] [ GH
De manera similar, agregará solo un =
al final de la salida para obtener 4 caracteres, el resultado será QUJD REVG R0g = (sin espacio)
De Wikipedia :
La secuencia final ''=='' indica que el último grupo contenía solo un byte, y ''='' indica que contenía dos bytes.
Por lo tanto, este es un tipo de relleno.
El signo igual (=) se utiliza como relleno en ciertas formas de codificación base64. El artículo de Wikipedia en base64 tiene todos los detalles.
Es relleno De http://en.wikipedia.org/wiki/Base64 :
En teoría, el carácter de relleno no es necesario para la decodificación, ya que el número de bytes faltantes se puede calcular a partir del número de dígitos de Base64. En algunas implementaciones, el carácter de relleno es obligatorio, mientras que para otras no se utiliza. Un caso en el que se requieren caracteres de relleno es la concatenación de múltiples archivos codificados en Base64.
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.
Sirve de padding .
Una respuesta más completa es que una cadena codificada en base64 no siempre termina con a =
, solo terminará con una o dos =
si se requiere que rellene la cadena a la longitud adecuada.
http://www.hcidata.info/base64.htm
Codificando "María tenía" a Base 64
En este ejemplo, estamos usando una cadena de texto simple ("Mary had") pero el principio es válido sin importar cuáles sean los datos (por ejemplo, el archivo de gráficos). Para convertir cada 24 bits de datos de entrada a 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 8 bytes de longitud. 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 al poner 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.