Como funciona a codificao em base64?
Quando falamos de texto - ou, mais precisamente, as letras que compem o alfabeto - estamos falando de caracteres individuais que so representados da mesma forma que nmeros, quando lidos pelo computador. Isto , tanto letras e nmeros so convertidos para valores binrios.
Cada letra possui um ndice na chamada tabela ASCII. Isso significa que podemos representar letras atravs de nmeros.
Logo, a palavra "Man" seria representada pelos valores 77, 97 e 110.
Esses valores, por sua vez, convertidos para base binria, correspondem a 01001101
01100001
01101110
.
At aqui, nenhuma informao muito nova.
Contudo, o que acontece se quisermos codificar dados binrios e transmiti-los atravs de locais que so designados para lidar com dados em texto (caracteres alfanumricos)?
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 pgina web. Temos ento um tpico caso no qual a converso para base64 til: pginas HTML so otimizadas para texto, e portanto converter as informaes binrias para texto se torna interessante.
Como funciona a codificao?
Para simplificar, vamos utilizar o exemplo anterior.
A palavra "Man" representada por 3 bytes, 01001101
01100001
01101110
.
Cada byte possui 8 bits, porm para iniciar a codificao para base64, precisamos que cada caractere corresponda a 6 bits. (Detalhe: 2^6 igual a 64, o nmero total de valores possveis em base64, portanto o nome da codificao)
Isso feito juntando os 3 nmeros, obtendo uma string de 24 bits: 010011010110000101101110
.
Dividindo a string de 24 bits em 4 dgitos de 6 bits cada, temos agora:010011
010110
000101
101110
, que correspondem, em decimal, a 19
,22
,5
e 46
.
O prximo passo encontrar a correspondncia de cada dgito na tabela base64:
Finalmente, isso nos d TWFu
como resultado. A codificao est feita.
A diviso em 24 bits e padding
Sabendo que a converso para base64 se d em grupos de 24 bits, ou de 4 dgitos com 6 bits, chegamos a uma questo importante: o que ocorre caso no tenhamos os 4 dgitos completos?
Vamos supor que em vez de "Man", tenhamos "Ma". Isso resultaria em dois bytes, ou 16 bits no total.
O prximo mltiplo de 6 18, logo, para que possamos ter 3 dgitos 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. Assim, podemos ento dividir essa string em 3 dgitos de 6 bits.
Esses bits, na hora da converso para ASCII, sero representados por =
. Ento Ma corresponde agora a TWE=
.
Veja, no exemplo abaixo, alguns casos onde o padding adicionado:
importante notar que nem sempre o padding vai ser obrigatrio, j que possvel saber se h bits que faltam pelo tamanho da string codificada - j que esse nmero deve ser sempre mltiplo de 4.
Original Link: https://dev.to/wrongbyte/como-funciona-a-codificacao-em-base64-2njd
Dev To
An online community for sharing and discovering great ideas, having debates, and making friendsMore About this Source Visit Dev To