Base64

Agora que você já teve contato com o código ASCII, vamos conhecer o Base64, um método para codificar e decodificar dados binários em caracteres ASCII.

Esse método é utilizado frequentemente para transferir dados em meios que só suportam formatos ASCII, por exemplo, enviar anexos por e-mail (que usa o MIME).

O nome base64 origina-se do fato de que esse sistema é constituido de 64 caracteres, representando exatamente 6 bits de dados. Com isso, três bytes de 8 bits podem ser representados por 4 digitos de 6 bits em Base64.

A tabela abaixo mostra a equivalência entre os valores de um conjunto de 6 bits e os caracteres usados para codificação.

Quando os bits da mensagem original não são multiplos de 6, são adicionados zeros como padding. Assim, na mensagem codificada é colocado um = para cada dois zeros de padding. Aliás, esse = é uma forma bem comum de reconhecer um texto codificado em Base64.

Abaixo está um exemplo de um texto codificado em Base64:

texto:          M        |        a        |        n
8 bits:  0 1 0 0 1 1 0 1 | 0 1 1 0 0 0 0 1 | 0 1 1 0 1 1 1 0
6 bits:  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:        19     |      22     |      5      |      46
texto:        T      |      W      |      F      |      u
(Base64)

E se tirarmos o n, a codificação vai necessitar de um padding:

texto:          M        |        a        |  
8 bits:  0 1 0 0 1 1 0 1 | 0 1 1 0 0 0 0 1 |  
6 bits:  0 1 0 0 1 1 | 0 1 0 1 1 0 | 0 0 0 1 0 0 | 0 0 0 0 0 0      
Valor:        19     |      22     |      5      |  (padding)
texto:        T      |      W      |      E      |      =
(Base64)

Ferramentas

Para manipular textos em Base64, pode-se usar o comando Unix base64.

Por exemplo, se tivermos uma arquivo sagan.txt com o texto The Cosmos is all that is or ever was or ever will be. Podemos convertê-lo para um arquivo sagan64.txt com o comando

base64 sagan.txt > sagan64.txt

O resultado será o arquivo sagan64.txt com o texto VGhlIENvc21vcyBpcyBhbGwgdGhhdCBpcyBvciBldmVyIHdhcyBvciBldmVyIHdpbGwgYmUK.

Agora, para decodificar o arquivo sagan64.txt, usamos o mesmo comando com a flag -d:

base64 -d sagan64.txt

Exercícios

OverTheWire: Krypton 0

Decodifique essa mensagem