Comece com o destino
Pergunte para onde o valor está indo antes de escolher uma ferramenta. A codificação de entidade HTML ajuda a representar caracteres como um ampersand dentro do texto HTML. A codificação de porcentagem torna um valor adequado para um componente de URL, onde espaços e caracteres reservados precisam de uma representação definida. Base64 representa bytes arbitrários usando um alfabeto restrito que é conveniente em sistemas orientados a texto. Um resumo SHA-256 é uma impressão digital de comprimento fixo usada para comparar dados, não uma maneira de recuperar o original. Nenhuma dessas quatro operações é criptografia. Se um segredo precisar permanecer confidencial, escolha um design de criptografia autenticado apropriado para o aplicativo em vez de disfarçá-lo com Base64 ou um hash.
Uma entrada, quatro resultados diferentes
Pegue o texto curto A&B. Em texto HTML comum, o ampersand pode ser escrito como A&B; um analisador HTML exibe A&B novamente. Como um componente de URL, ele se torna A%26B, porque um ampersand sem escape pode separar parâmetros de consulta. UTF-8 codifica os três caracteres visíveis como bytes 41 26 42 em hexadecimal, e Base64 padrão representa esses bytes como QSZC. Uma ferramenta SHA-256 produz um longo digest hexadecimal em vez disso; uma pequena mudança de entrada normalmente dará um digest muito diferente. Essas saídas não são intercambiáveis: colocar Base64 onde um componente URL é esperado ainda pode introduzir caracteres URL reservados, e colocar um hash em um documento não pode reproduzir o texto original.
- A&B — texto original
- HTML: A&B · URL: A%26B
- Base64: QSZC · SHA-256: resumo
Reversibilidade e segurança
Entidades HTML, codificação de porcentagem e Base64 são reversíveis quando sua codificação de entrada e contexto são conhecidos. É precisamente por isso que não oferecem segredo. Alguém lendo uma string Base64 pode decodificá-la sem uma chave. SHA-256 é projetado para ser unidirecional, mas apenas o hash de uma senha previsível não é um método seguro de armazenamento de senha; esquemas dedicados de hash de senha salgados abordam esse problema separado. Um resumo também não prova quem forneceu os dados, a menos que seja usado dentro de um protocolo autenticado. Para conteúdo do navegador, o escape é específico de contexto: o texto HTML, um atributo HTML, um URL e a fonte JavaScript têm regras diferentes. Escapar de um contexto e colar o resultado em outro pode ser inseguro.
Um fluxo de trabalho de conversão prático
Primeiro identifique o texto bruto e o formato de recepção. Se você estiver construindo um nó de texto HTML, use o codificador de entidade HTML para os caracteres que precisam de representação lá; deixe um sistema de modelo confiável lidar com a marcação HTML na produção. Se você estiver colocando um valor em um parâmetro de URL, use o codificador de componente de URL uma vez e, em seguida, adicione o valor codificado ao parâmetro. Se uma interface explicitamente espera Base64, converta o texto em bytes com a codificação de caracteres acordada, geralmente UTF-8, antes de codificar esses bytes. Se você precisar comparar a integridade de duas sequências de bytes, faça o hash de ambas com o mesmo algoritmo e compare seus digestões. Mantenha os bytes originais disponíveis se você precisar exibir a mensagem original posteriormente.
Verifique a viagem de ida e volta
Tente descodificar o resultado com o decodificador correspondente sempre que a transformação deva ser reversível. Observe a codificação dupla: A%26B codificado uma segunda vez contém %25 e decodifica apenas uma camada de cada vez. Verifique se o seu receptor Base64 espera o alfabeto padrão, uma variante de URL segura ou caracteres de preenchimento. Para hashes, confirme a codificação exata de bytes e se quebras de linha ou espaços finais fazem parte da entrada; texto visualmente semelhante pode ter bytes diferentes. O conversor Base64 incorporado abaixo é uma maneira rápida de testar o caso reversível. Use as ferramentas HTML, URL e SHA-256 vinculadas para os outros caminhos e, em seguida, escolha a saída cujo significado corresponde ao sistema de recepção.