Subir un archivo
  1. base64hub
  2. Tabla del alfabeto Base64

Tabla del alfabeto Base64

Base64 asigna a cada valor de 6 bits, de 0 a 63, un carácter imprimible. Aquí tienes la tabla completa, la versión URL-safe y qué caracteres aparecen en cada posición.

Los 64 caracteres

Base64 lee la entrada de 3 en 3 bytes (24 bits) y los divide en cuatro números de 6 bits. Cada número, de 0 a 63, es un índice de esta tabla. El orden lo fija el RFC 4648: mayúsculas del 0 al 25, minúsculas del 26 al 51, dígitos del 52 al 61 y después + y /. La última columna es el código ASCII del carácter, que es lo que realmente se guarda o se envía.

Índice6 bitsBase64Base64URLCódigo ASCII
0000000AA0x41
1000001BB0x42
2000010CC0x43
3000011DD0x44
4000100EE0x45
5000101FF0x46
6000110GG0x47
7000111HH0x48
8001000II0x49
9001001JJ0x4A
10001010KK0x4B
11001011LL0x4C
12001100MM0x4D
13001101NN0x4E
14001110OO0x4F
15001111PP0x50
16010000QQ0x51
17010001RR0x52
18010010SS0x53
19010011TT0x54
20010100UU0x55
21010101VV0x56
22010110WW0x57
23010111XX0x58
24011000YY0x59
25011001ZZ0x5A
26011010aa0x61
27011011bb0x62
28011100cc0x63
29011101dd0x64
30011110ee0x65
31011111ff0x66
32100000gg0x67
33100001hh0x68
34100010ii0x69
35100011jj0x6A
36100100kk0x6B
37100101ll0x6C
38100110mm0x6D
39100111nn0x6E
40101000oo0x6F
41101001pp0x70
42101010qq0x71
43101011rr0x72
44101100ss0x73
45101101tt0x74
46101110uu0x75
47101111vv0x76
48110000ww0x77
49110001xx0x78
50110010yy0x79
51110011zz0x7A
52110100000x30
53110101110x31
54110110220x32
55110111330x33
56111000440x34
57111001550x35
58111010660x36
59111011770x37
60111100880x38
61111101990x39
62111110+-0x2B
63111111/_0x2F
relleno–=suele omitirse0x3D

Conviene memorizar dos rangos. Todos los caracteres de A a P (0 a 15) empiezan por los bits 00, y todos los de w a / (48 a 63) empiezan por 11. Con eso basta para decodificar un carácter de cabeza cuando revisas un prefijo a mano. En cómo funciona Base64 hay un ejemplo resuelto de la división en bits.

El orden del alfabeto no es el orden ASCII. En ASCII van primero + y /, luego los dígitos, luego las mayúsculas y por último las minúsculas. Por eso, ordenar cadenas Base64 no ordena los bytes subyacentes: +A== (el byte F8) queda antes que AA== (el byte 00). Si necesitas valores codificados que se ordenen igual que los bytes originales, usa base32hex del RFC 4648 o hexadecimal sin más.

El alfabeto URL-safe

+ y / tienen un significado especial en las URL. + se decodifica como espacio en las query strings y en los datos de formularios, y / separa los segmentos de la ruta. Base64URL, definido en la sección 5 del RFC 4648, conserva los índices 0 a 61 y cambia los dos últimos:

ÍndiceBase64Base64URL
62+-
63/_

Todo lo demás, incluida la disposición de los bits, es idéntico, así que convertir de uno a otro consiste en sustituir caracteres y añadir o quitar el relleno. Los JWT, muchos tokens de API y los identificadores aptos para nombres de archivo usan Base64URL, normalmente sin =. El codificador Base64URL lo genera directamente. La comparación completa está en Base64 frente a Base64URL.

El carácter de relleno

= (ASCII 0x3D) no forma parte del alfabeto de 64 caracteres y nunca codifica datos. Solo completa el último grupo de 4 caracteres cuando la longitud de la entrada no es múltiplo de 3:

  • Sobra 1 byte: 2 caracteres de datos más ==.
  • Sobran 2 bytes: 3 caracteres de datos más =.
  • No sobra ningún byte: sin relleno.

Por tanto, una cadena con relleno siempre tiene una longitud múltiplo de 4, y nunca verás ===. Sin relleno, la longitud dividida entre 4 deja de resto 0, 2 o 3, nunca 1. La guía del relleno explica cuándo se puede omitir = y cómo restaurarlo.

Qué caracteres aparecen en cada posición

Algunos patrones se deducen directamente de la disposición de los bits. Los comprobamos por fuerza bruta con todos los valores de byte relevantes.

Antes de == solo verás A, Q, g o w. Cuando sobra un byte, el segundo carácter lleva 2 bits de datos seguidos de 4 bits a cero, así que su índice es 0, 16, 32 o 48. Antes de un solo =, el tercer carácter termina en 2 bits a cero, de modo que es uno de estos 16: A E I M Q U Y c g k o s w 0 4 8. Cualquier otro carácter en esa posición indica una codificación no canónica, que los decodificadores estrictos rechazan.

Los bytes aleatorios usan los 64 caracteres por igual. Cada grupo de 6 bits de datos aleatorios tiene una distribución uniforme, así que los datos cifrados, las claves y los archivos comprimidos producen una distribución de caracteres plana. Una distribución sesgada sugiere que los datos son texto o tienen estructura.

El texto ASCII nunca pone en primer lugar una g a z minúscula, un dígito, + ni /. El primer carácter de cada grupo de 4 contiene los 6 bits altos de un byte. En ASCII de 7 bits el bit más alto es 0, así que ese carácter siempre está entre A y f (índices 0 a 31). En SGVsbG8gd29ybGQh (Hello world!) los grupos empiezan por S, b, d y b.

En el Base64 de un texto ASCII, + y / son poco frecuentes. Con bytes por debajo de 0x80, + solo puede aparecer como cuarto carácter de un grupo, cuando el tercer byte es > o ~. / solo puede aparecer ahí cuando ese byte es ? o el carácter de control DEL. Por eso Hi?> se codifica como SGk/Pg== y <b> como PGI+.

Las rachas de A son bytes cero; las de /, bytes 0xFF. AAAA son tres bytes 00 y //// son tres bytes FF. Los tramos largos de A son típicos de formatos binarios dispersos, del texto UTF-16 (Hello es SABlAGwAbABvAA==) y de los campos de longitud al principio de las claves SSH. Encontrarás más patrones reconocibles en prefijos Base64 habituales.

Otros alfabetos Base64

Varios sistemas mantuvieron la idea de 64 caracteres por cada 6 bits, pero eligieron otros caracteres:

VarianteAlfabeto en orden de índiceDónde se usa
EstándarA-Z a-z 0-9 + /RFC 4648, MIME, PEM, la mayoría de las API
URL-safeA-Z a-z 0-9 - _RFC 4648 sección 5, JWT
Nombres de buzón IMAPA-Z a-z 0-9 + ,UTF-7 modificado del RFC 3501
bcrypt. / A-Z a-z 0-9Hashes de contraseñas $2a$, $2b$, $2y$
crypt(3). / 0-9 A-Z a-zMD5-crypt $1$, SHA-crypt $5$ y $6$, DES crypt
xxencode+ - 0-9 A-Z a-zCorreo antiguo de Unix y Usenet
uuencodeASCII 32 a 95 (del espacio a _), a menudo con ` para el 0Correo antiguo de Unix y Usenet
  • IMAP sustituye / por , porque / es un separador de jerarquía habitual en los nombres de buzón. Una carpeta llamada Entwürfe se guarda como Entw&APw-rfe.
  • bcrypt pone . y / al principio y deja las letras antes que los dígitos. Sus salts y hashes son Base64 en este alfabeto sin relleno, y por eso un decodificador estándar devuelve bytes incorrectos con ellos.
  • crypt(3) usa ./0-9A-Za-z, que es el orden ASCII. Además empaqueta los bits empezando por el extremo menos significativo, así que ni siquiera traduciendo el alfabeto un decodificador estándar reproduce los bytes del hash.
  • uuencode y xxencode son anteriores a MIME. Las herramientas uuencode y xxencode leen y escriben ambos formatos.

Para codificaciones con alfabetos de otro tamaño, como Base32, Base58 y Base85, consulta Base64 frente a hex, Base32, Base58 y Base85. Las definiciones de los términos usados aquí están en el glosario.

Preguntas frecuentes

¿Cuántos caracteres tiene el alfabeto Base64?

64 caracteres para datos: 26 letras mayúsculas, 26 minúsculas, 10 dígitos, + y /. El signo de relleno = es un símbolo número 65 que nunca transporta datos.

¿Qué valor tiene la letra A en Base64?

A corresponde al índice 0, en binario 000000. B es 1, Z es 25, a es 26, z es 51, 0 es 52, 9 es 61, + es 62 y / es 63.

¿Qué caracteres cambia Base64URL?

Solo dos: + (índice 62) pasa a ser - y / (índice 63) pasa a ser _. Además, el relleno se suele omitir. Convierte con Base64 a Base64URL.