Eu sei o que base64
é codificação e como calcular a base64
codificação em c #, no entanto, eu já vi várias vezes que, quando converto uma string em base64, existe uma =
no final.
Surgiram algumas perguntas:
- Uma
base64
string sempre termina com=
? - Por que um
=
apêndice é anexado no final?
Respostas:
Serve como preenchimento .
Uma resposta mais completa é que uma string codificada em base64 nem sempre termina com a
=
, ela só termina com uma ou duas=
se forem necessárias para preencher a string no comprimento apropriado.fonte
=
seria suficiente. Se você deseja encontrar os limites de volta, um terminador sempre deve estar presente (e ainda é necessário apenas um caractere). O conceito estofamento toda a Base64 é apenas um brainfart ...base64
eficiente, com ilustrações e exemplos. O link atual para a wikipedia é absolutamente irrelevante como @NH. mencionado.1-Não
2- Como resposta curta: O 65º caractere (sinal "=") é usado apenas como complemento no processo final de codificação de uma mensagem.
Você não terá um sinal de '=' se a sua string tiver um número múltiplo de 3 caracteres, porque a
Base64
codificação usa cada três bytes (8 bits) e os representa como quatro caracteres imprimíveis no padrão ASCII.Detalhes:
(a) Se você deseja codificar
ABCDEFG <=> [
ABC
] [DEF
] [G
Base64
lidará (produzindo 4 caracteres) com o primeiro bloco e o segundo (à medida que estiverem completos), mas, para o terceiro, adicionará um dobro==
na saída para concluir os 4 caracteres necessários. Assim, o resultado será QUJD REVG Rw == (sem espaço)(b) Se você deseja codificar ...
ABCDEFGH <=> [
ABC
] [DEF
] [GH
Da mesma forma, ele adicionará apenas um
=
no final da saída para obter 4 caracteres, o resultado será QUJD REVG R0g = (sem espaço)fonte
Da Wikipedia :
Portanto, isso é algum tipo de preenchimento.
fonte
fonte
=
no final e testei isso para 1 milhão de strings. A decodificação sempre correspondia.É definido no RFC 2045 como um caractere de preenchimento especial se menos de 24 bits estiverem disponíveis no final dos dados codificados.
fonte
O sinal de igual (=) é usado como preenchimento em certas formas de codificação base64. O artigo da Wikipedia sobre base64 tem todos os detalhes.
fonte
Está estofando. Em http://en.wikipedia.org/wiki/Base64 :
fonte
decode(encode(A)+encode(B))=A+B
funciona com preenchimento, mas não sem.http://www.hcidata.info/base64.htm
Codificando "Mary had" para a Base 64
Neste exemplo, estamos usando uma string de texto simples ("Mary had"), mas o princípio é válido independentemente dos dados (por exemplo, arquivo gráfico). Para converter cada 24 bits de dados de entrada em 32 bits de saída, a codificação Base 64 divide os 24 bits em 4 pedaços de 6 bits. O primeiro problema que notamos é que "Mary tinha" não é um múltiplo de 3 bytes - tem 8 bytes. Por esse motivo, o último grupo de bits tem apenas 4 bits. Para remediar isso, adicionamos dois bits extras de '0' e lembramos desse fato colocando um '=' no final. Se a sequência de texto a ser convertida na Base 64 tivesse 7 bytes, o último grupo teria 2 bits. Nesse caso, teríamos acrescentado quatro bits extras de '0' e lembrado desse fato colocando '==' no final.
fonte