Esta página ou seção foi marcada para revisão devido a incoerências ou dados de confiabilidade duvidosa. |
Este artigo não cita fontes confiáveis. (Agosto de 2017) |
Base64 é um método para codificação de dados para transferência na Internet (codificação MIME para transferência de conteúdo). É utilizado frequentemente para transmitir dados binários por meios de transmissão que lidam apenas com texto, como por exemplo para enviar arquivos anexos por e-mail.
É constituído por 64 caracteres ([A-Z],[a-z],[0-9], "/" e "+") que deram origem ao seu nome. O carácter "=" é utilizado como um sufixo especial e a especificação original (RFC 989) definiu que o símbolo "*" pode ser utilizado para delimitar dados convertidos, mas não criptografados, dentro de um stream.
Exemplo de codificação:
- Texto original:
Olá, mundo!
- Texto convertido para Base64:
T2zDoSwgbXVuZG8h
A codificação Base64 é frequentemente utilizada quando existe uma necessidade de transferência e armazenamento de dados binários para um dispositivo designado para trabalhar com dados textuais. Esta codificação é amplamente utilizada por aplicações em conjunto com a linguagem de marcação XML, possibilitando o armazenamento de dados binários em forma de texto.
Exemplo
Um fragmento de Leviathan, de Thomas Hobbes, (note a existência de espaços entre as palavras):
Man is distinguished, not only by his reason, but by this singular passion from other animals, which is a lust of the mind, that by a perseverance of delight in the continued and indefatigable generation of knowledge, exceeds the short vehemence of any carnal pleasure.
Sua representação em caracteres ASCII codificados no formato Base64 MIME:
TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlz IHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1c3Qgb2Yg dGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0aGUgY29udGlu dWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRo ZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4=
No fragmento acima, o equivalente em Base64 de Man é TWFu. Codificados em ASCII, os caracteres M, a, e n são armazenados como bytes com valores 77
, 97
, e 110
, cujos valores binários são 01001101
, 01100001
, e 01101110
. Estes 3 valores são concatenados formando um valor de 24 bits, produzindo 010011010110000101101110
. Grupos de 6 bits (6 bits formam um máximo de 26 = 64 valores binários diferentes) são separados da esquerda para a direita (neste caso, há 4 conjuntos nos 24 bits) e convertidos em seus valores correspondentes em Base64.
Texto | M | a | n | |||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ASCII | 77 (0x4d) | 97 (0x61) | 110 (0x6e) | |||||||||||||||||||||
Binário | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 0 |
Valor correspondente (index) | 19 | 22 | 5 | 46 | ||||||||||||||||||||
Codificado em base64 | T | W | F | u |
Como ilustrado neste exemplo, três octetos são representados em Base64 como quatro caracteres.
A tabela de equivalência entre valores correspondentes (index) e os caracteres utilizados para codificação:
Valor | Caractere |
---|---|
0 | A
|
1 | B
|
2 | C
|
3 | D
|
4 | E
|
5 | F
|
6 | G
|
7 | H
|
8 | I
|
9 | J
|
10 | K
|
11 | L
|
12 | M
|
13 | N
|
14 | O
|
15 | P
|
Valor | Caractere |
---|---|
16 | Q
|
17 | R
|
18 | S
|
19 | T
|
20 | U
|
21 | V
|
22 | W
|
23 | X
|
24 | Y
|
25 | Z
|
26 | a
|
27 | b
|
28 | c
|
29 | d
|
30 | e
|
31 | f
|
Valor | Caractere |
---|---|
32 | g
|
33 | h
|
34 | i
|
35 | j
|
36 | k
|
37 | l
|
38 | m
|
39 | n
|
40 | o
|
41 | p
|
42 | q
|
43 | r
|
44 | s
|
45 | t
|
46 | u
|
47 | v
|
Valor | Caractere |
---|---|
48 | w
|
49 | x
|
50 | y
|
51 | z
|
52 | 0
|
53 | 1
|
54 | 2
|
55 | 3
|
56 | 4
|
57 | 5
|
58 | 6
|
59 | 7
|
60 | 8
|
61 | 9
|
62 | +
|
63 | /
|
Quando o número de bytes a ser convertido não for divisível por três (se houver somente um ou dois bytes para compor o último bloco de 24 bits), o seguinte algoritmo é aplicado:
- Adiciona-se o número necessário de bytes com valor zero para que haja 3 bytes. Assim, o bloco fica completo e a conversão é feita normalmente. Se houver somente um byte de entrada significativo, somente os dois primeiros dígitos codificados em base64 (12 bits) são mantidos, e se houverem dois bytes, os três primeiros dígitos codificados (18 bits) são mantidos. O caractere '=' pode ser adicionado para que o último bloco codificado possua 4 caracteres. Assim, quando o último grupo contiver um octeto, os 4 bits menos significativos do grupo final de 6 bits são zero; e quando o último grupo contiver dois octetos, os dois bits menos significativos do grupo de 6 bits são zero.