Enviar um arquivo
  1. base64hub
  2. Tabela do alfabeto Base64

Tabela do alfabeto Base64

O Base64 associa cada valor de 6 bits, de 0 a 63, a um caractere imprimível. Aqui estão a tabela completa, a versão URL-safe e os fatos sobre quais caracteres aparecem em cada posição.

Os 64 caracteres

O Base64 lê a entrada de 3 em 3 bytes (24 bits) e divide cada grupo em quatro números de 6 bits. Cada número, de 0 a 63, é um índice nesta tabela. A ordem é fixada pela RFC 4648: maiúsculas de 0 a 25, minúsculas de 26 a 51, dígitos de 52 a 61 e, por fim, + e /. A última coluna é o código ASCII do caractere, que é o que de fato é armazenado ou transmitido.

Í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
preenchimento–=geralmente omitido0x3D

Vale a pena decorar duas faixas. Todo caractere de A a P (0 a 15) começa com os bits 00, e todo caractere de w a / (48 a 63) começa com 11. Isso basta para decodificar um caractere de cabeça quando você confere um prefixo à mão. Um exemplo completo da divisão em bits está em como o Base64 funciona.

A ordem do alfabeto não é a ordem ASCII. No ASCII, + e / vêm primeiro, depois os dígitos, depois as maiúsculas e por último as minúsculas. Por isso, ordenar strings Base64 não ordena os bytes por trás delas: +A== (o byte F8) fica antes de AA== (o byte 00). Se você precisa de valores codificados que se ordenem como os bytes brutos, use o base32hex da RFC 4648 ou hex simples.

O alfabeto URL-safe

+ e / têm significado especial em URLs. + é decodificado como espaço em query strings e dados de formulário, e / separa os segmentos do caminho. O Base64URL, definido na seção 5 da RFC 4648, mantém os índices de 0 a 61 e troca os dois últimos:

ÍndiceBase64Base64URL
62+-
63/_

Todo o resto, inclusive a disposição dos bits, é idêntico, então converter de um para o outro é uma troca de caracteres mais a inclusão ou remoção do preenchimento. JWTs, muitos tokens de API e identificadores seguros para nomes de arquivo usam Base64URL, geralmente sem =. O codificador Base64URL gera esse formato diretamente. A comparação completa está em Base64 vs Base64URL.

O caractere de preenchimento

= (ASCII 0x3D) não faz parte do alfabeto de 64 caracteres e nunca codifica dados. Ele só completa o último grupo de 4 caracteres quando o tamanho da entrada não é múltiplo de 3:

  • Sobra 1 byte: 2 caracteres de dados mais ==.
  • Sobram 2 bytes: 3 caracteres de dados mais =.
  • Não sobra nenhum byte: sem preenchimento.

Assim, uma string com preenchimento sempre tem comprimento múltiplo de 4, e você nunca vê ===. Sem preenchimento, o comprimento dividido por 4 deixa resto 0, 2 ou 3, nunca 1. O guia de preenchimento explica quando o = pode ser omitido e como restaurá-lo.

Quais caracteres aparecem onde

Alguns padrões decorrem diretamente da disposição dos bits. Eles foram conferidos por força bruta em todos os valores de byte relevantes.

Antes de == só aparecem A, Q, g ou w. Quando sobra um byte, o segundo caractere carrega 2 bits de dados seguidos de 4 bits zero, então o índice dele é 0, 16, 32 ou 48. Antes de um único =, o terceiro caractere termina com 2 bits zero, então é um destes 16: A E I M Q U Y c g k o s w 0 4 8. Qualquer outro caractere nessa posição indica uma codificação não canônica, que decodificadores rígidos rejeitam.

Bytes aleatórios usam os 64 caracteres por igual. Cada grupo de 6 bits de dados aleatórios tem distribuição uniforme, então dados criptografados, chaves e arquivos compactados produzem uma distribuição de caracteres plana. Uma distribuição desigual é sinal de que os dados são texto ou têm estrutura.

Texto ASCII nunca começa um grupo com g a z minúsculos, dígitos, + ou /. O primeiro caractere de cada grupo de 4 guarda os 6 bits mais altos de um byte. No ASCII de 7 bits o bit mais alto é 0, então esse caractere fica sempre entre A e f (índice 0 a 31). Em SGVsbG8gd29ybGQh (Hello world!), os grupos começam com S, b, d e b.

No Base64 de texto ASCII, + e / são raros. Para bytes abaixo de 0x80, + só pode aparecer como quarto caractere de um grupo, quando o terceiro byte é > ou ~. / só aparece ali quando esse byte é ? ou o caractere de controle DEL. É por isso que Hi?> vira SGk/Pg== e <b> vira PGI+.

Sequências de A são bytes zero, sequências de / são 0xFF. AAAA são três bytes 00, //// são três bytes FF. Trechos longos de A são típicos de formatos binários esparsos, de texto UTF-16 (Hello é SABlAGwAbABvAA==) e dos campos de tamanho no início das chaves SSH. Mais padrões reconhecíveis estão em prefixos Base64 comuns.

Outros alfabetos Base64

Vários sistemas mantiveram a ideia de 64 caracteres para 6 bits, mas escolheram caracteres diferentes:

VarianteAlfabeto na ordem dos índicesOnde
PadrãoA-Z a-z 0-9 + /RFC 4648, MIME, PEM, a maioria das APIs
URL-safeA-Z a-z 0-9 - _RFC 4648 seção 5, JWT
Nomes de caixas de correio IMAPA-Z a-z 0-9 + ,UTF-7 modificado da RFC 3501
bcrypt. / A-Z a-z 0-9Hashes de senha $2a$, $2b$, $2y$
crypt(3). / 0-9 A-Z a-zMD5-crypt $1$, SHA-crypt $5$ e $6$, DES crypt
xxencode+ - 0-9 A-Z a-zE-mail antigo do Unix e Usenet
uuencodeASCII 32 a 95 (do espaço a _), muitas vezes com ` para 0E-mail antigo do Unix e Usenet
  • IMAP troca / por , porque / é um separador de hierarquia comum em nomes de caixas de correio. Uma pasta chamada Entwürfe é armazenada como Entw&APw-rfe.
  • bcrypt passa . e / para o início e mantém as letras antes dos dígitos. Os salts e hashes dele são Base64 nesse alfabeto, sem preenchimento, e é por isso que um decodificador padrão devolve os bytes errados.
  • crypt(3) usa ./0-9A-Za-z, que é a ordem ASCII. Ele também empacota os bits a partir do lado menos significativo, então mesmo com o alfabeto traduzido um decodificador padrão não reproduz os bytes do hash.
  • uuencode e xxencode são anteriores ao MIME. As ferramentas uuencode e xxencode leem e escrevem os dois formatos.

Para codificações com alfabetos de outros tamanhos, como Base32, Base58 e Base85, veja Base64 vs hex, Base32, Base58 e Base85. As definições dos termos usados aqui estão no glossário.

Perguntas frequentes

Quantos caracteres tem o alfabeto Base64?

64 caracteres para os dados: 26 letras maiúsculas, 26 minúsculas, 10 dígitos, + e /. O sinal de preenchimento = é um 65º símbolo que nunca carrega dados.

Qual é o valor da letra A no Base64?

A corresponde ao índice 0, binário 000000. B é 1, Z é 25, a é 26, z é 51, 0 é 52, 9 é 61, + é 62 e / é 63.

Quais caracteres o Base64URL troca?

Só dois: + (índice 62) vira - e / (índice 63) vira _. O preenchimento também costuma ser removido. Converta com Base64 para Base64URL.