Neste artigo, discutiremos as aplicações de hashing .

O hash fornece pesquisa em tempo constante, operações de inserção e exclusão em média. É por isso que o hashing é uma das estruturas de dados mais usadas, problemas de exemplo são, elementos distintos , contando frequências de itens, encontrando duplicatas, etc.

Existem muitas outras aplicações de hashing, incluindo funções hash de criptografia dos dias modernos. Alguns desses aplicativos estão listados abaixo:

  • Message Digest
  • Verificação de senha
  • Estruturas de dados (linguagens de programação)
  • Operação do compilador
  • Algortitmo Rabin-Karp
  • Vinculando o nome e o caminho do arquivo

Message Digest:
Este é um aplicativo de funções criptográficas de hash. Funções criptográficas de hash são as funções que produzem uma saída a partir da qual chegar à entrada é quase impossível. Essa propriedade das funções hash é chamada de irreversibilidade .

Vamos dar um exemplo :
suponha que você tenha que armazenar seus arquivos em qualquer um dos serviços de nuvem disponíveis. Você deve ter certeza de que os arquivos que você armazena não são violados por terceiros. Você faz isso computando o “hash” desse arquivo usando um algoritmo de hash criptográfico. Um dos algoritmos de hash criptográficos comuns é o SHA 256 . O hash calculado dessa forma tem um tamanho máximo de 32 bytes. Portanto, computar o
hash de um grande número de arquivos não será um problema. Você salva esses hashes em sua máquina local.

Agora, quando você baixa os arquivos, calcula o hash novamente. Então você o compara com o hash anterior calculado. Portanto, você sabe se seus arquivos foram adulterados ou não. Se alguém adulterar o arquivo, o valor do hash do arquivo com certeza mudará. Adulterar o arquivo sem alterar o hash é quase impossível.

Verificação de senha
As funções de hash criptográfico são muito comumente usadas na verificação de senha. Vamos entender isso usando um exemplo :
Ao usar qualquer site online que requer um login de usuário, você insere seu e-mail e senha para autenticar que a conta que está tentando usar pertence a você. Quando a senha é inserida, um hash da senha é calculado e enviado ao servidor para verificação da senha. As senhas armazenadas no servidor são, na verdade, valores de hash calculados das senhas originais. Isso é feito para garantir que, quando a senha for enviada do cliente para o servidor, não haja detecção.

Estruturas de dados (linguagens de programação):
várias linguagens de programação têm estruturas de dados baseadas em hash table. A ideia básica é criar um par de valores-chave em que a chave deve ser um valor único, enquanto o valor pode ser o mesmo para chaves diferentes. Esta implementação é vista em unordered_set e unordered_map em C++, HashSet e HashMap em java, dict em python etc.

Operação do compilador:
as palavras-chave de uma linguagem de programação são processadas de maneira diferente de outros identificadores. Para diferenciar entre as palavras-chave de uma linguagem de programação (if, else, for, return etc.) e outros identificadores e para compilar o programa com sucesso, o compilador armazena todas essas palavras-chave em um conjunto que é implementado usando uma tabela hash.

Algoritmo Rabin-Karp:
Uma das aplicações mais famosas de hashing é o algoritmo Rabin-Karp. Este é basicamente um algoritmo de pesquisa de string que usa hashing para encontrar qualquer conjunto de padrões em uma string. Uma aplicação prática desse algoritmo é a detecção de plágio. Para saber mais sobre o algoritmo Rabin-Karp, consulte Searching for Patterns | Conjunto 3 (Algoritmo Rabin-Karp) .

Vinculando o nome e o caminho do arquivo:
Ao percorrer os arquivos em nosso sistema local, observamos dois componentes cruciais de um arquivo, isto é, nome_do_arquivo e caminho_do_arquivo. Para armazenar a correspondência entre file_name e file_path, o sistema usa um mapa (file_name, file_path) que é implementado usando uma tabela hash.

Artigos relacionados:

Hashing vs BST

Hashing vs Trie