O que é o Base64?
O Base64 é um método para converter dados binários arbitrários, dados compostos por mais do que apenas caracteres de texto sem formatação, em uma mensagem de texto sem formatação que pode ser transferida através de uma rede de computadores. É o que chamamos de codificação. Embora a saída de uma mensagem codificada em base64 não seja algo que um ser humano possa entender prontamente, ela ainda é composta por 64 caracteres comuns em inglês, que é a origem do nome, com um 65º caractere adicional usado para fins especiais.
A idéia por trás do base64 surgiu quando surgiu a necessidade de obter mais do que simples caracteres de texto por meio de comunicações em rede, como email. As primeiras mensagens de email começaram como caracteres codificados no Código Padrão Americano para Intercâmbio de Informações (ASCII), o método de codificação usado em computadores para representar caracteres do alfabeto em inglês como texto em displays ou impressoras. Como informações binárias adicionais necessárias para passar, novos esquemas de codificação foram desenvolvidos.
O método de codificação base64 foi descrito pela primeira vez no padrão MIME (Multipurpose Internet Mail Extensions). O padrão MIME definiu métodos pelos quais outros caracteres que não eram codificados em ASCII, como alfabetos usados em idiomas não ingleses, além de outros dados binários arbitrários, também poderiam ser codificados em sequências ASCII e transmitidos por mensagens de email. Dos dois principais meios de codificação descritos pelo padrão MIME, a base64 compartilha a função com outro conhecido como impressão entre aspas. Embora o método de impressão entre aspas seja capaz de estender o ASCII um pouco além dos seus 94 caracteres imprimíveis limitados, a base64 pode pegar qualquer sequência de bytes e convertê-la em uma sequência ASCII.
O Base64 precisa pegar seqüências de dados que não atendessem ao padrão ASCII e convertê-las em ASCII. Para fazer isso, o método de codificação é um processo de reunir os dados em grupos de três bytes e convertê-los em quatro números que representam os caracteres ASCII correspondentes. Como um byte tem oito bits, onde cada bit é representado por um ou zero, três bytes são vinculados de ponta a ponta e toda a sequência entra em um buffer de 24 bits. Os 24 uns e zeros são então divididos em quatro grupos de seis bits, onde cada um recebe números que correspondem a um caractere ASCII.
Como base64 é capaz de codificar qualquer dado binário, qualquer sequência de bytes pode passar pelo processo. Há um problema, no entanto, naqueles casos em que o número de bytes para codificação não é divisível por três, para que os bits possam caber no buffer. Se uma sequência de bytes contiver, digamos, quatro ou cinco bytes, ainda será necessário algo para preencher o buffer e compor os 24 bits completos. Nesses casos, cada byte ausente é representado por oito 0s e é posteriormente convertido em caracteres de preenchimento na codificação final. É daí que vem o 65º caractere mencionado anteriormente, representado na mensagem codificada com um sinal de igual (=); ele só aparece no final de uma codificação, caso seja necessário um preenchedor.
Embora o base64 tenha sido originalmente desenvolvido para transmitir dados binários por meio de mensagens de email, seu uso entrou em jogo em várias outras áreas além do MIME. Um desses usos bastante comuns é que os bancos de dados e aplicativos da Web codifiquem dados para a criação de um URL (Localizador Uniforme de Recursos) em um formulário da Web. A linguagem de marcação extensível (XML) também usa uma variante que permite que dados binários, como imagens pequenas, sejam incluídos nos documentos XML. Existem outras variações para métodos de criptografia e outras técnicas relacionadas à segurança, como ocultar senhas.