Em uma nota relacionada, aqui está um conversor de base para conversão de base arbitrária que criei para você. Aproveitar!
https://convert.zamicol.com/
O que são caracteres de preenchimento?
Os caracteres de preenchimento ajudam a satisfazer os requisitos de comprimento e não têm significado.
Exemplo de Decimal de Preenchimento:
Dado o requisito arbitrário de todas as strings terem 8 caracteres de comprimento, o número 640 pode atender a esse requisito usando os 0s anteriores como caracteres de preenchimento, pois eles não têm significado, "00000640".
Codificação Binária
O Paradigma do Byte: O byte é a unidade de medida padrão de fato e qualquer esquema de codificação deve estar relacionado aos bytes.
Base256 se encaixa exatamente neste paradigma. Um byte é igual a um caractere em base256.
Base16 , hexadecimal ou hex, usa 4 bits para cada caractere. Um byte pode representar dois caracteres de base16.
Base64 não se encaixa uniformemente no paradigma de byte (nem base32), ao contrário de base256 e base16. Todos os caracteres de base64 podem ser representados em 6 bits, 2 bits menos que um byte completo.
Podemos representar a codificação base64 versus o paradigma do byte como uma fração: 6 bits por caractere em 8 bits por byte . Esta fração reduzida é de 3 bytes em 4 caracteres.
Essa proporção, 3 bytes para cada 4 caracteres base64, é a regra que desejamos seguir ao codificar base64. A codificação Base64 só pode prometer medição com pacotes de 3 bytes, ao contrário de base16 e base256, onde cada byte pode estar sozinho.
Então, por que o preenchimento é encorajado, embora a codificação pudesse funcionar bem sem os caracteres de preenchimento?
Se o comprimento de um fluxo for desconhecido ou se puder ser útil saber exatamente quando um fluxo de dados termina, use preenchimento. Os caracteres de preenchimento comunicam explicitamente que esses pontos extras devem estar vazios e elimina qualquer ambigüidade. Mesmo que o comprimento seja desconhecido com o preenchimento, você saberá onde termina o seu fluxo de dados.
Como contra-exemplo, alguns padrões como JOSE não permitem caracteres de preenchimento. Neste caso, se houver algo faltando, uma assinatura criptográfica não funcionará ou outros caracteres não base64 estarão faltando (como o "."). Embora suposições sobre o comprimento não sejam feitas, o preenchimento não é necessário porque se houver algo errado, ele simplesmente não funcionará.
E isso é exatamente o que diz o RFC de base64 ,
Em algumas circunstâncias, o uso de preenchimento ("=") em dados codificados de base não é necessário ou usado. No caso geral, quando suposições sobre o tamanho dos dados transportados não podem ser feitas, o preenchimento é necessário para produzir dados decodificados corretos.
[...]
O passo de preenchimento na base 64 [...] se implementado incorretamente, leva a alterações não significativas dos dados codificados. Por exemplo, se a entrada for apenas um octeto para uma codificação de base 64, todos os seis bits do primeiro símbolo serão usados, mas apenas os dois primeiros bits do próximo símbolo serão usados. Esses bits de preenchimento DEVEM ser definidos como zero pelos codificadores em conformidade, que são descritos nas descrições de preenchimento abaixo. Se essa propriedade não for mantida, não haverá representação canônica de dados codificados por base e várias strings codificadas por base poderão ser decodificadas para os mesmos dados binários. Se esta propriedade (e outras discutidas neste documento) for mantida, uma codificação canônica é garantida.
O preenchimento nos permite decodificar a codificação base64 com a promessa de que não haverá perda de bits. Sem preenchimento, não há mais o reconhecimento explícito da medição em pacotes de três bytes. Sem preenchimento, você pode não ser capaz de garantir a reprodução exata da codificação original sem informações adicionais geralmente de algum outro lugar em sua pilha, como TCP, somas de verificação ou outros métodos.
Exemplos
Aqui está o formulário de exemplo RFC 4648 ( http://tools.ietf.org/html/rfc4648#section-8 )
Cada caractere dentro da função "BASE64" usa um byte (base256). Em seguida, traduzimos isso para base64.
BASE64("") = "" (No bytes used. 0%3=0.)
BASE64("f") = "Zg==" (One byte used. 1%3=1.)
BASE64("fo") = "Zm8=" (Two bytes. 2%3=2.)
BASE64("foo") = "Zm9v" (Three bytes. 3%3=0.)
BASE64("foob") = "Zm9vYg==" (Four bytes. 4%3=1.)
BASE64("fooba") = "Zm9vYmE=" (Five bytes. 5%3=2.)
BASE64("foobar") = "Zm9vYmFy" (Six bytes. 6%3=0.)
Este é um codificador com o qual você pode brincar: http://www.motobit.com/util/base64-decoder-encoder.asp