Qual esquema de codificação de texto você usa quando possui dados binários que você precisa enviar sobre um canal ASCII?

StackOverflow https://stackoverflow.com/questions/2090009

  •  21-09-2019
  •  | 
  •  

Pergunta

Se você possui dados binários que precisa codificar, qual esquema de codificação você usa?

Eu sei sobre:

  • Codificação hexadecimal. Muito simples, mas bastante detalhado, expande um byte para dois.
  • Base 64. O mais comum, não tão detalhado, expande três bytes para quatro.
  • Base 85. Não comum, menos detalhado novamente, expande quatro bytes para cinco.

Existem outros esquemas de codificação em uso comum? Em caso afirmativo, o que há vantagens e desvantagens?

Editar: Isso é útil, por exemplo, ao tentar armazenar dados arbitrários em um cookie. Os cookies só podem armazenar o texto, não dados arbitrários, portanto, você precisa convertê -los de alguma forma, de preferência com uma maneira de convertê -los de volta. Além disso, suponha que você esteja usando um servidor sem estado para que não possa salvar o estado no servidor e apenas colocar um identificador no cookie. Obviamente, se você fizer isso, também precisaria de uma maneira de verificar se o que o usuário está passando para você é o que você passou para o usuário, por exemplo, uma assinatura.

Além disso, como o consenso atual é que você deve usar a base64, pois é generalizado, também vou apontar que isso é O que eu uso ... Estou apenas curioso se alguém usou mais alguma coisa, e se sim, por quê.

Editar: Apenas para o caso de alguém tropeçar nisso, se você quiser usar a base64 para armazenar dados em um cookie, você precisa usar uma implementação Base64 modificada. Ver esta resposta pelo motivo.

Foi útil?

Solução

Para codificar valores de cookies, você precisa ter cuidado. Veja isso resposta mais antiga:

Com os cookies da versão 0, os valores não devem conter espaço em branco, suportes, parênteses, é igual a sinais, vírgulas, citações duplas, barras, pontos de interrogação, sinais, colonos e semicolons. Os valores vazios podem não se comportar da mesma maneira em todos os navegadores.

A codificação base64 pode gerar = Símbolos para certas entradas, e isso tecnicamente não é permitido em cookies (versão 0 cookies, de qualquer maneira, que são os mais amplamente suportados). Na prática, eu suspeito do = realmente funcionará bem, mas talvez não.

Eu sugeriria que ter certeza absoluta de que seu binário codificado é compatível com biscoitos, então a codificação básica Hex é mais segura (por exemplo, em java).

editar: Como @Paul apontou, há um versão modificada da base 64 Isso é "URL seguro" (e, presumo, "cookie seguro"). Usando uma versão modificada de um algoritmo padrão dilui seu charme, lembre -se.

editar: @shoosh apontou que o = é usado apenas para denotar o final da string base64, para que você possa aparar o =, defina o cookie e depois reaparte o = Novamente quando você precisar decodificá -lo.

Outras dicas

Base64 vence porque é tão comum que eu nunca preciso me preocupar em rolar meu próprio codificador/decodificador. Não encontrei nenhum aplicativo em que estive preocupado em salvar a largura de banda ou o FileSpace em dados binários codificados.

Era uma vez, havia UTF-7. É oficialmente depreciado, mas ainda funciona como um ás (codificação compatível com ASCII). Agora há Idn.

Base64 é o padrão de fato. Usar qualquer outra coisa está pedindo problemas.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top