Como funciona a codificação Base64
A codificação Base64 é um processo de conversão de dados binários em um formato de string ASCII, convertendo esses dados binários em uma representação de caracteres de 6 bits. O método de codificação Base64 é usado quando dados binários, como imagens ou vídeo, são transmitidos por sistemas projetados para transmitir dados em formato de texto simples (ASCII).
Por que a codificação Base64 é usada?
A necessidade de codificação Base64 vem dos problemas que ocorrem quando a mídia é transmitida em formato binário bruto para sistemas baseados em texto.
Já que sistemas baseados em texto (como o email) interpretar dados binários como uma ampla gama de caracteres, incluindo caracteres de comando especiais, muitos dos dados binários que é transmitido para a mídia de transferência é mal interpretado por esses sistemas e perdido ou corrompido na transmissão processo.
![Homem olhando para um código de computador na tela](/f/009fbda9d9ec64dc7666cad002175a31.jpg)
Um método de codificação deste tipo de dados binários de uma forma que evita tais problemas de transmissão é enviá-los como texto ASCII simples no formato codificado em Base64. Esta é uma das técnicas empregadas pelo padrão MIME para enviar dados diferentes de texto simples.
Muitas linguagens de programação, como PHP e Javascript, incluem funções de codificação e decodificação Base64 para interpretar os dados transmitidos usando a codificação Base64.
Lógica de codificação Base64
A codificação Base64 divide os dados binários em segmentos de 6 bits de 3 bytes completos e os representa como caracteres imprimíveis no padrão ASCII. Ele faz isso essencialmente em duas etapas.
A primeira etapa é dividir a string binária em blocos de 6 bits. Base64 usa apenas 6 bits (correspondendo a 2 ^ 6 = 64 caracteres) para garantir que os dados codificados sejam impressos e legíveis por humanos. Nenhum dos caracteres especiais disponíveis em ASCII é usado.
Os 64 caracteres (daí o nome Base64) são 10 dígitos, 26 caracteres minúsculos, 26 caracteres maiúsculos, bem como o sinal de mais (+) e a barra (/). Há também um 65º personagem conhecido como um almofada, que é o sinal de igual (=). Este caractere é usado quando o último segmento de dados binários não contém 6 bits completos.
Exemplo de codificação Base64
Por exemplo, pegue três números ASCII 155, 162 e 233. Esses três números constituem um fluxo binário de 100110111010001011101001. Um arquivo binário, como uma imagem, contém um fluxo binário rodando por dezenas ou centenas de milhares de zeros e uns.
Um codificador Base64 começa dividindo o fluxo binário em agrupamentos de seis caracteres: 100110 111010 001011 101001. Cada um desses agrupamentos se traduz nos números 38, 58, 11 e 41.
Um fluxo binário de seis caracteres converte entre caracteres binários (ou base 2) em decimais (base 10) ao elevar ao quadrado cada valor representado por 1 na seqüência binária com seu quadrado posicional. Começando da direita e indo para a esquerda e começando com zero, os valores no fluxo binário representam 2 ^ 0, depois 2 ^ 1, 2 ^ 2, 2 ^ 3, 2 ^ 4 e 2 ^ 5.
Esta é outra maneira de ver isso. Começando da esquerda, cada posição vale 1, 2, 4, 8, 16 e 32. Se o número binário tiver 1 no slot, você adiciona esse valor; se tiver um 0 no slot, você não tem. A string binária 100110 é convertida no número decimal 38: 0 * 2 ^ 01 + 1 * 2 ^ 1 + 1 * 2 ^ 2 + 0 * 2 ^ 3 + 0 * 2 ^ 4 + 1 * 2 ^ 5 = 0 + 2 + 4 + 0 + 0 + 32.
A codificação Base64 pega essa string binária e a divide nos valores de 6 bits 38, 58, 11 e 41.
Finalmente, esses números são convertidos em caracteres ASCII usando a tabela de codificação Base64. Os valores de 6 bits deste exemplo são convertidos para a sequência ASCII m6Lp.
Usando a tabela de conversão Base64:
- 38 é m
- 58 é 6
- 11 é L
- 41 é p
Este processo de duas etapas é aplicado a toda a string binária que está codificada.
Para garantir que os dados codificados possam ser impressos corretamente e não excedam o limite de comprimento de linha do servidor de e-mail, caracteres de nova linha são inseridos para manter os comprimentos de linha abaixo de 76 caracteres. Os caracteres de nova linha são codificados como todos os outros dados.
Todo o propósito da codificação Base64, desde adicionar preenchimento para preservar segmentos binários de 3 bytes até converter binário em texto usando a tabela Base64, é preservar a integridade do binário transmitido em formação.
Tabela de codificação Base64
A tabela a seguir traduz todos os 64 caracteres usados na codificação Base64.
Tabela de codificação Base64 | |||||||
---|---|---|---|---|---|---|---|
Valor | Caracteres | Valor | Caracteres | Valor | Caracteres | Valor | Caracteres |
0 | UMA | 16 | Q | 32 | g | 48 | C |
1 | B | 17 | R | 33 | h | 49 | x |
2 | C | 18 | S | 34 | eu | 50 | y |
3 | D | 19 | T | 35 | j | 51 | z |
4 | E | 20 | você | 36 | k | 52 | 0 |
5 | F | 21 | V | 37 | eu | 53 | 1 |
6 | G | 22 | C | 38 | m | 54 | 2 |
7 | H | 23 | X | 39 | n | 55 | 3 |
8 | eu | 24 | Y | 40 | o | 56 | 4 |
9 | J | 25 | Z | 41 | p | 57 | 5 |
10 | K | 26 | uma | 42 | q | 58 | 6 |
11 | eu | 27 | b | 43 | r | 59 | 7 |
12 | M | 28 | c | 44 | s | 60 | 8 |
13 | N | 29 | d | 45 | t | 61 | 9 |
14 | O | 30 | e | 46 | você | 62 | + |
15 | P | 31 | f | 47 | v | 63 | / |
Resolvendo o Endgame
No final do processo de codificação, pode haver um problema. Se o tamanho dos dados originais em bytes for um múltiplo de três, tudo funcionará bem. Se não estiver, pode haver bytes vazios. Para uma codificação adequada, são necessários exatamente 3 bytes de dados binários.
A solução é acrescentar bytes suficientes com um valor de 0 para criar um grupo de 3 bytes. Dois desses valores são acrescentados se os dados precisarem de um byte extra de dados, um é acrescentado para dois bytes extras.
Obviamente, esses '0's finais artificiais não podem ser codificados usando a tabela de codificação abaixo. Eles devem ser representados por um 65º personagem. O caractere de preenchimento Base64 é o sinal de igual (=) e é colocado no final dos dados codificados.