Guías Datos y codificación

Cómo funcionan Base64 y la codificación

Qué es (y qué no es) la codificación, cómo Base64 convierte tres bytes en cuatro caracteres, por qué añade un tercio y qué errores evitar.

Última revisión:

AdSense Placeholder
Slot: header_reference_page
En esta página

Codificar es convertir datos de una representación a otra para que puedan viajar o guardarse donde se espera un formato concreto. No es cifrado: no hay clave, cualquiera puede revertirlo y no oculta nada. Base64 es el ejemplo más común: escribe cualquier secuencia de bytes con solo 64 caracteres imprimibles seguros, de modo que los datos binarios puedan pasar por sistemas pensados para texto.

Por qué existe Base64

Muchos protocolos antiguos se diseñaron para texto plano. Los cuerpos de correo, las cadenas JSON, las URL y los atributos HTML pueden romper o corromper bytes arbitrarios: un byte nulo suelto, un salto de línea fuera de sitio o un carácter con significado especial. Base64 evita el problema usando solo A-Z, a-z, 0-9, + y / (más = como relleno). Lo verá en adjuntos de correo, URL data:, JSON Web Tokens y en las claves de los archivos de certificados.

Cómo funciona

Base64 lee la entrada de tres en tres bytes (24 bits) y vuelve a cortar esos 24 bits en cuatro grupos de 6 bits. Cada grupo de 6 bits es un número de 0 a 63, y cada número elige un carácter del alfabeto (A es 0, Z es 25, a es 26, z es 51, 0 es 52, 9 es 61, + es 62, / es 63).

Tomemos las tres letras Man:

Carácter M a n
Valor del byte 77 97 110
8 bits 01001101 01100001 01101110

Unidos son 010011010110000101101110, que se divide en cuatro grupos de 6 bits:

Grupo de 6 bits Índice Carácter
010011 19 T
010110 22 W
000101 5 F
101110 46 u

Así, Man se convierte en TWFu. Puede comprobarlo con Codificador Base64.

Relleno y tamaño

Tres bytes de entrada siempre dan cuatro caracteres, así que la salida es aproximadamente un tercio mayor que la entrada. Si la longitud de la entrada no es múltiplo de tres, el último grupo se completa con signos = para que la salida siga siendo múltiplo de cuatro.

Entrada Base64 Bytes de entrada Caracteres de salida
Hi SGk= 2 4
Hello SGVsbG8= 5 8
Hello, world! SGVsbG8sIHdvcmxkIQ== 13 20
a YQ== 1 4
ab YWI= 2 4
abc YWJj 3 4

Un byte sobrante da dos caracteres y ==; dos bytes sobrantes dan tres caracteres y =.

Variantes

  • Base64 seguro para URL sustituye + por - y / por _ (y a menudo omite el =), porque +, / y = tienen significados especiales en las URL. Los bytes fb ff fe son +//+ en Base64 estándar y -__- en la forma segura para URL. Los JSON Web Tokens usan esta variante.
  • Base64 MIME (correo) inserta un salto de línea cada 76 caracteres.
  • Base32 y Base16 (hex) funcionan igual con alfabetos más pequeños: son más largos, pero más cómodos para sistemas que no distinguen mayúsculas y para quien teclea códigos a mano.

Errores habituales

  • Tratar Base64 como seguridad. Una contraseña o secreto que solo está en Base64 está a la vista de todos. Cualquiera puede pegarlo en Decodificador Base64. Use cifrado o hash de verdad para los secretos.
  • Codificar texto sin elegir juego de caracteres. Base64 codifica bytes, no letras. Con texto importa si esos bytes son UTF-8 u otra cosa, y una discrepancia convierte é en basura al otro lado.
  • Codificar dos veces. Codificar datos ya codificados los infla otro tercio y se decodifican como texto ilegible. Si los datos decodificados siguen pareciendo Base64, se codificaron dos veces.
  • Olvidar la variante. Base64 estándar y seguro para URL no son intercambiables: una cadena con - o _ falla en un decodificador estándar estricto.
  • Romperlo con saltos de línea o espacios. Algunos decodificadores rechazan los saltos de línea incrustados; otros los ignoran.

Dónde probarlo

Codifique con Codificador Base64 y decodifique con Decodificador Base64; ambos se ejecutan por completo en su navegador. Para los bytes que hay bajo el texto, vea ASCII y UTF-8.

Pruebe estas herramientas

Véase también

  • Glosario ASCII
    ASCII es una codificación de caracteres de 7 bits que asigna los números 0 a 127 a letras inglesas, dígitos.
  • Glosario UTF-8
    UTF-8 es la codificación Unicode dominante: escribe cada carácter con uno a cuatro bytes y es idéntica a ASCII en los primeros 128.

Preguntas frecuentes

No. Base64 es una codificación reversible sin clave. Cualquiera puede decodificarla al instante, así que nunca debe usarse para proteger una contraseña o un secreto.

Cada 3 bytes de entrada (24 bits) se convierten en 4 caracteres que llevan solo 6 bits cada uno. Cuatro caracteres por tres bytes es una proporción de 4 a 3, un 33 % más, más el relleno.

AdSense Placeholder
Slot: footer_leaderboard