¿Por qué una cadena codificada en base64 tiene un signo = al final?
Sé qué base64
es la codificación y cómo calcular base64
la codificación en C#, sin embargo, he visto varias veces que cuando convierto una cadena a base64, hay un =
al final.
Surgieron algunas preguntas:
- ¿Una
base64
cadena siempre termina en=
? - ¿ Por qué se añade un
=
al final?
P ¿Una cadena base64 siempre termina en =
?
R: No. (la palabra usb
está codificada en base64 dXNi
)
P ¿Por qué se añade un =
al final?
R: Como respuesta corta:
el último carácter ( =
signo) se agrega solo como complemento (relleno) en el proceso final de codificación de un mensaje con una cantidad especial de caracteres.
No tendrá un =
signo si su cadena tiene un múltiplo de 3 caracteres, porque Base64
la codificación toma tres bytes cada uno (un carácter = 1 byte) y los representa como cuatro caracteres imprimibles en el estándar ASCII.
Ejemplo :
(a) Si desea codificar
ABCDEFG <=> [ ABC
] [ DEF
] [ G
]
Base64
Se ocupa del primer bloque (produciendo 4 personajes) y del segundo (a medida que se completan). Pero para el tercero, agregará un doble ==
en la salida para completar los 4 caracteres necesarios. Así, el resultado será QUJD REVG Rw== (sin espacios).
[ ABC
] =>QUJD
[ DEF
] =>REVG
[ G
] =>Rw==
(b) Si desea codificar ABCDEFGH <=> [ ABC
] [ DEF
] [ GH
]
de manera similar, agregará uno =
al final del resultado para obtener 4 caracteres.
El resultado será QUJD REVG R0g= (sin espacios).
[ ABC
] =>QUJD
[ DEF
] =>REVG
[ GH
] =>R0g=
Sirve como relleno .
Una respuesta más completa es que una cadena codificada en base64 no siempre termina con a =
, solo terminará con uno o dos =
si es necesario rellenar la cadena con la longitud adecuada.
De Wikipedia :
La secuencia final '==' indica que el último grupo contenía solo un byte y '=' indica que contenía dos bytes.
Por tanto, se trata de una especie de relleno.
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.
- No.
- Rellenar la cadena codificada en Base64 a un múltiplo de 4 caracteres de longitud, para que pueda decodificarse correctamente.