¿Por qué una cadena codificada en base64 tiene un signo = al final?

Resuelto santosh singh asked hace 13 años • 10 respuestas

Sé qué base64es la codificación y cómo calcular base64la codificación en C#, sin embargo, he visto varias veces que cuando convierto una cadena a base64, hay un =al final.

Surgieron algunas preguntas:

  1. ¿Una base64cadena siempre termina en =?
  2. ¿ Por qué se añade un =al final?
santosh singh avatar Aug 03 '11 01:08 santosh singh
Aceptado

P ¿Una cadena base64 siempre termina en =?

R: No. (la palabra usbestá 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 Base64la 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]

Base64Se 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=

Badr Bellaj avatar Apr 12 '2016 10:04 Badr Bellaj

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.

Andrew Hare avatar Aug 02 '2011 18:08 Andrew Hare

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.

Legolas avatar Aug 02 '2011 18:08 Legolas

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.

iandotkelly avatar Aug 02 '2011 18:08 iandotkelly
  1. No.
  2. Rellenar la cadena codificada en Base64 a un múltiplo de 4 caracteres de longitud, para que pueda decodificarse correctamente.
Ian Kemp avatar Feb 21 '2014 15:02 Ian Kemp