Como funciona a codificação Base64

Índice:

Como funciona a codificação Base64
Como funciona a codificação Base64
Anonim

A codificação Base64 é um processo de conversão de dados binários para 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.

Como os sistemas baseados em texto (como e-mail) interpretam os dados binários como uma ampla variedade de caracteres, incluindo caracteres de comando especiais, muitos dos dados binários que são transmitidos para a mídia de transferência são mal interpretados por esses sistemas e perdidos ou corrompidos em o processo de transmissão.

Image
Image

Um método de codificar este tipo de dados binários de forma a evitar 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 que não sejam texto simples.

Muitas linguagens de programação, como PHP e Javascript, incluem funções de codificação e decodificação Base64 para interpretar dados transmitidos usando a codificação Base64.

Lógica de Codificação Base64

A codificação Base64 quebra 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 basicamente em duas etapas.

O primeiro passo é 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 imprimíveis e legíveis. Nenhum dos caracteres especiais disponíveis em ASCII são usados.

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 adição (+) e a barra (/). Há também um 65º caractere conhecido como pad, 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 executado por dezenas ou centenas de milhares de zeros e uns.

Um codificador Base64 começa dividindo o fluxo binário em grupos 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 caracteres decimais (base 10) elevando ao quadrado cada valor representado por um 1 na sequência binária com seu quadrado posicional. Começando da direita e movendo para a esquerda e começando com zero, os valores no fluxo binário representam 2^0, depois 2^1, depois 2^2, depois 2^3, depois 2^4, depois 2^5.

Aqui está 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 um 1 no slot, você adiciona esse valor; se tiver um 0 no slot, você não tem. A string binária 100110 converte para o número decimal 38: 02^01 + 12^1 + 12^2 + 02^3 + 02^4 + 12^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 traduzem 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 codificada.

Para garantir que os dados codificados possam ser impressos corretamente e não excedam o limite de comprimento de linha de nenhum 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 das informações binárias transmitidas.

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 Char Valor Char Valor Char Valor Char
0 A 16 Q 32 g 48 w
1 B 17 R 33 h 49 x
2 C 18 S 34 i 50 y
3 D 19 T 35 j 51 z
4 E 20 U 36 k 52 0
5 F 21 V 37 l 53 1
6 G 22 W 38 m 54 2
7 H 23 X 39 55 3
8 I 24 Y 40 o 56 4
9 J 25 Z 41 p 57 5
10 K 26 a 42 q 58 6
11 L 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 u 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 funciona bem. Se não for, pode haver bytes vazios. Para uma codificação adequada, são necessários exatamente 3 bytes de dados binários.

A solução é anexar bytes suficientes com um valor de 0 para criar um grupo de 3 bytes. Dois desses valores são anexados se os dados precisarem de um byte extra de dados, um é anexado para dois bytes extras.

Claro, esses '0's à direita artificiais não podem ser codificados usando a tabela de codificação abaixo. Eles devem ser representados por um 65º caractere. O caractere de preenchimento Base64 é o sinal de igual (=) e é colocado no final dos dados codificados.

Recomendado: