DEV Community

Cover image for Como funciona a codificação em base64?
wrongbyte
wrongbyte

Posted on • Edited on

Como funciona a codificação em base64?

Quando falamos de texto - ou, mais precisamente, as letras que compõem o alfabeto - estamos falando de caracteres individuais que são representados da mesma forma que números, quando lidos pelo computador. Isto é, tanto letras e números são convertidos para valores binários.

Veja a tabela abaixo:
tabela ascii

Cada letra possui um índice na chamada tabela ASCII. Isso significa que podemos representar letras através de números.
Logo, a palavra "Man" seria representada pelos valores 77, 97 e 110.
Esses valores, por sua vez, convertidos para base binária, correspondem a 01001101 01100001 01101110.
Até aqui, nenhuma informação muito nova.

Contudo, o que acontece se quisermos codificar dados binários e transmiti-los através de locais que são designados para lidar com dados em texto (caracteres alfanuméricos)?
A forma escolhida para fazer isso de maneira otimizada é codificar os dados na base64.

O que é base64?

Imagine que você quer inserir uma imagem em uma página web. Temos então um típico caso no qual a conversão para base64 é útil: páginas HTML são otimizadas para texto, e portanto converter as informações binárias para texto se torna interessante.

Como funciona a codificação?

Para simplificar, vamos utilizar o exemplo anterior.
A palavra "Man" é representada por 3 bytes, 01001101 01100001 01101110.
Cada byte possui 8 bits, porém para iniciar a codificação para base64, precisamos que cada caractere corresponda a 6 bits. (Detalhe: 2^6 é igual a 64, o número total de valores possíveis em base64, portanto o nome da codificação)
Isso é feito juntando os 3 números, obtendo uma string de 24 bits: 010011010110000101101110.
Dividindo a string de 24 bits em 4 dígitos de 6 bits cada, temos agora:
010011 010110 000101 101110, que correspondem, em decimal, a 19,22,5 e 46.

O próximo passo é encontrar a correspondência de cada dígito na tabela base64:
tabela base64

Finalmente, isso nos dá TWFu como resultado. A codificação está feita. 🎉

A divisão em 24 bits e padding

Sabendo que a conversão para base64 se dá em grupos de 24 bits, ou de 4 dígitos com 6 bits, chegamos a uma questão importante: o que ocorre caso não tenhamos os 4 dígitos completos?
Vamos supor que em vez de "Man", tenhamos "Ma". Isso resultaria em dois bytes, ou 16 bits no total.
O próximo múltiplo de 6 é 18, logo, para que possamos ter 3 dígitos de 6 bits, precisamos adicionar 2 bits na string representada.
Isso significa que 0100110101100001 se torna 010011010110000100, porque adicionamos 2 bits - dois zeros - no final, o que é chamado de padding. Assim, podemos então dividir essa string em 3 dígitos de 6 bits e adicionar um quarto bit para completar o quarteto. Esse bit é o padding que, na hora da conversão para ASCII, vai ser representado por =. Então Ma corresponde agora a TWE=.
Veja, no exemplo abaixo, alguns casos onde o padding é adicionado:
padding examples

É importante notar que nem sempre o padding vai ser obrigatório, já que é possível saber se há bits que faltam pelo tamanho da string codificada - já que esse número deve ser sempre múltiplo de 4.

Top comments (0)