Hash
Codificação, Segurança & Caracteres
Uma função hash (ou digest, "resumo") recebe qualquer quantidade de dado — um texto curto ou um arquivo inteiro — e devolve uma sequência de tamanho fixo. Três propriedades definem uma boa função hash: é determinística (o mesmo dado sempre gera o mesmo hash), é de mão única (não existe forma de reconstruir o dado original a partir do hash — não é encode, não tem "decode") e é sensível a qualquer mudança (alterar um único caractere no dado de entrada muda o hash inteiro, de forma imprevisível).
- MD5 / SHA-1
- Algoritmos antigos, ainda vistos em sistemas legados — hoje considerados fracos para fins de segurança.
- SHA-256
- Padrão atual, usado pela assinatura digital de documentos fiscais brasileiros.
Hash não é criptografia (não existe segredo nem chave envolvida) nem encoding (não existe operação inversa) — é uma "impressão digital" do dado. No fluxo fiscal, é a peça central da assinatura digital de um XML: em vez de criptografar o documento inteiro com a chave privada — lento para documentos grandes —, calcula-se o hash dele primeiro, e só o hash é assinado. Também serve para conferir integridade: comparar o hash de dois arquivos é uma forma rápida de saber se são byte a byte idênticos, sem precisar comparar o conteúdo inteiro manualmente.