Como o hashing funciona e quais são os riscos de usá-lo para reduzir dados
Você já parou para pensar como um arquivo de vários gigabytes pode ser representado por apenas algumas dezenas de caracteres? Neste artigo, explico como o hashing funciona, por que ele não é compressão e quais cuidados aparecem quando usamos um hash para "diminuir" um dado, passando por tabelas hash, colisões e armazenamento de senhas.

Hashing é um processo que transforma um dado de qualquer tamanho em um valor de tamanho fixo, chamado de hash. Para isso, é utilizada uma função de hash, que recebe uma informação como entrada e realiza uma série de operações matemáticas sobre ela.
Um exemplo simples seria aplicar uma função de hash (no caso, o SHA-256) sobre uma frase:
"Olá mundo" → 44dae5dccc2e6ca3710dc84afd296754c6cd84465452d7a1d75d876528cc7e44
Mesmo que o texto original tivesse centenas ou milhares de caracteres, o resultado continuaria tendo um tamanho definido pela função utilizada (64 caracteres hexadecimais no SHA-256) => e essa é uma das magias do hash.
Uma característica importante dos hashes criptográficos, como o SHA-256, é que pequenas alterações no dado original geralmente produzem hashes completamente diferentes (efeito cascata)! Alterar apenas uma letra de um texto já pode gerar outro resultado completamente diferente, sem uma relação visual clara com o hash anterior.
Hashing como forma de reduzir o tamanho de um dado
Como o resultado possui tamanho fixo, o hashing pode representar dados muito maiores usando uma quantidade pequena de informação.
Por exemplo:
imagine arquivos com vários megabytes. Em vez de guardar ou comparar todo o conteúdo para descobrir se dois arquivos são iguais, pode-se calcular o hash de cada um e comparar apenas esses valores. Se você não sabia disso deve estar assim nesse momento:

Isso é bastante útil em verificações de integridade, bancos de dados, sistemas de cache, estruturas como tabelas hash e até no armazenamento de senhas.
Porém, existe uma diferença importante: hashing não é compressão.
Quando um arquivo é compactado, a intenção é diminuir seu tamanho e depois conseguir recuperar o conteúdo original. Com hashing isso não acontece. A função gera apenas uma representação daquele dado e, normalmente, não existe uma operação capaz de transformar o hash de volta no conteúdo original.
Ou seja, ao representar um dado grande apenas pelo seu hash, parte da informação original é perdida.
