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 bytesfb ff feson+//+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.