Programação  
 
Rede de conhecimento computador >> Programação >> Programming Ruby >> Content
O que é um hash e como ele é usado na programação?

O que é um hash?



No contexto da ciência da computação e da programação, um hash (também conhecido como código de hash, valor de hash ou digestão de mensagens) é uma representação numérica de tamanho fixo de dados de entrada do tamanho arbitrário. Pense nisso como uma impressão digital para uma peça de dados.

O processo de geração de um hash é chamado hashing , e é executado por uma função hash .

características -chave das funções de hash:

* determinístico: Para os mesmos dados de entrada, a função hash sempre produzirá o mesmo valor de hash.
* unidirecional (idealmente): Deve ser inviável computacionalmente reverter a função de hash para determinar a entrada original do seu valor de hash. (Isso é mais crítico para as funções de hash criptográfico.)
* Saída de tamanho fixo: Independentemente do tamanho dos dados de entrada, a função de hash gera um valor de hash de um tamanho específico e predeterminado (por exemplo, 32 bits, 64 bits, 256 bits).
* Resistência à colisão (idealmente): Uma boa função de hash deve minimizar a probabilidade de diferentes entradas que produzem o mesmo valor de hash (uma "colisão"). Embora as colisões sejam inevitáveis, elas devem ser raras.

Analogia:

Imagine que você tem um documento (os dados de entrada). Uma função de hash é como uma máquina que resume esse documento em um resumo curto e de comprimento fixo (o valor do hash). O resumo deve ser:

* consistente: O mesmo documento sempre produz o mesmo resumo.
* Único (tanto quanto possível): Idealmente, documentos diferentes devem produzir resumos diferentes.
* irreversível (idealmente): Você não pode recriar o documento original apenas de seu resumo.

Como os hashes são usados ​​na programação



Os hashes têm inúmeras aplicações em programação e estruturas de dados:

1. Estruturas de dados (tabelas de hash/hash):

* Este é o uso mais comum. As tabelas de hash são usadas para armazenamento e recuperação eficientes de dados com base nas chaves.
* como funciona: Uma função de hash converte a chave em um índice (valor de hash) dentro de uma matriz. O valor associado à chave é armazenado nesse índice.
* Benefícios: Fornece pesquisa de casos médios muito rápida (complexidade (1)) porque o índice é calculado diretamente a partir da chave.
* Exemplo: Dicionários em Python, mapas em Java, objetos como matrizes associativas em JavaScript.

`` `Python

Python Dictionary (uma implementação da tabela de hash)


my_dict ={"Apple":1, "banana":2, "laranja":3}
print (my_dict ["Apple"]) # Acessando o valor usando a chave "Apple" - O (1) Tempo médio
`` `

2. Verificação da integridade dos dados:

* Os hashes podem ser usados ​​para garantir que os dados não tenham sido adulterados durante a transmissão ou armazenamento.
* como funciona: Calcule o hash dos dados antes de enviá -los ou armazená -los. Posteriormente, recalcule o hash e compare -o com o valor do hash original. Se os hashes corresponderem, os dados provavelmente permanecerão inalterados.
* Exemplo: Summas de verificação, verificação de integridade de arquivos em downloads de software, detectando dados corrompidos em bancos de dados.

`` `Python
importar hashlib

Data ="Este é o meu dado".
hash_object =hashlib.md5 (data.encode ()) #Encode converte a string em bytes
md5_hash =hash_object.hexdigest ()

print (f "hash md5:{md5_hash}")
`` `

3. Armazenamento de senha:

* Armazenar senhas diretamente em um banco de dados é um risco de segurança. Os hashes são usados ​​para armazenar uma representação unidirecional da senha.
* como funciona: Quando um usuário cria uma conta, a senha é hash (geralmente com um "sal" - uma sequência aleatória adicionada à senha antes do hash). O hash é armazenado, não a senha real. Quando o usuário faz login, a senha inserida também é hash (com o mesmo sal) e o hash resultante é comparado ao hash armazenado.
* Benefícios: Mesmo que o banco de dados esteja comprometido, os invasores não podem recuperar diretamente as senhas.
* Considerações de segurança: Os algoritmos modernos de hash de senha (como BCRYPT, SCRYPT, ARGON2) são deliberadamente lentos e usam sais para torná-los resistentes a ataques de força bruta e ataques de mesa de arco-íris.

`` `Python
importar bCrypt

senha =b "my_secret_password" # senha como bytes

Gere um sal


sal =bcrypt.Gensalt ()

Hash a senha com o sal


hashed_password =bcrypt.hashpw (senha, sal)

print (f "Senha com hashed:{hashed_password}")

Para verificar a senha mais tarde:


ENTERED_PASSWORD =B "my_secret_password"
Se bcrypt.checkpw (Enterred_password, hashed_password):
Print ("Matches de senha!")
outro:
print ("A senha não corresponde.")
`` `

4. Cache:

* Os hashes podem ser usados ​​para criar teclas de cache para armazenar os resultados de cálculos caros.
* como funciona: Os parâmetros de entrada para uma função (ou o estado de um sistema) são hashes e o valor do hash é usado como uma chave em um cache (como uma tabela de hash). Se a mesma entrada for encontrada novamente, o resultado em cache poderá ser recuperado diretamente, evitando a recomputação.
* Exemplo: MEMOIZAÇÃO, armazenamento em cache frequentemente acessados ​​dados em aplicativos da Web.

5. Desduplicação de dados:

* Os hashes podem ser usados ​​para identificar itens de dados duplicados.
* como funciona: Quando novos dados devem ser armazenados, seu hash é calculado. Se o hash já existir em um banco de dados de hashes conhecidos, os dados provavelmente serão uma duplicata e podem ser ignorados (ou armazenados apenas uma vez).
* Exemplo: Sistemas de armazenamento, serviços de compartilhamento de arquivos.

6. Filtros de Bloom:

* Estruturas de dados probabilísticas que usam hash para testar se um elemento é um membro de um conjunto. Os filtros Bloom podem ter falsos positivos (eles podem dizer que um elemento está no conjunto quando não é), mas eles nunca têm falsos negativos (eles nunca dirão que um elemento não está no conjunto, se for).

7. Criptografia:

* As funções de hash criptográfico (SHA-256, SHA-3, etc.) são usadas para vários fins de segurança, incluindo:
* Assinaturas digitais:criando um hash de um documento e, em seguida, criptografando o hash com uma chave privada.
* Códigos de autenticação de mensagem (MACS):Criando um hash que depende de uma chave secreta, usada para verificar a integridade e a autenticidade.
* Criptomoedas:o hash é fundamental para a tecnologia blockchain para criar blocos e verificar transações.

Funções comuns de hash



Existem muitas funções diferentes de hash. Aqui estão alguns exemplos:

* md5 (Mensagem Digest 5): (Depreendido para aplicações sensíveis à segurança porque é vulnerável a colisões). Gera um hash de 128 bits.
* sha-1 (algoritmo de hash seguro 1): (Também depreciado para aplicações sensíveis à segurança devido a vulnerabilidades). Gera um hash de 160 bits.
* sha-2 (algoritmo de hash seguro 2): Uma família de funções de hash, incluindo SHA-256 (hash de 256 bits), SHA-384 (hash de 384 bits) e SHA-512 (hash de 512 bits). Geralmente considerado mais seguro que o MD5 e o SHA-1.
* sha-3 (algoritmo de hash seguro 3): Uma família diferente de funções de hash escolhidas em uma competição do NIST. Oferece um design diferente do SHA-2.
* bcrypt, scrypt, argon2: Algoritmos de hash de senha projetados para serem lentos e resistentes a ataques. Essas não são funções de hash genéricas; Eles são especificamente para armazenamento de senha.
* murmurhash, fnv hash: As funções de hash não-choptogragráficas frequentemente usadas para implementações de tabela de hash onde a velocidade é importante.

Considerações importantes



* Colisões: As colisões são inevitáveis, especialmente ao lidar com grandes conjuntos de dados. Boas implementações de tabela de hash têm estratégias de resolução de colisão (por exemplo, encadeamento separado, endereçamento aberto) para lidar com colisões com eficiência.
* Escolha da função de hash: A escolha da função hash depende do aplicativo. Para aplicações sensíveis à segurança, use funções de hash criptográfico. Para tabelas de hash, escolha uma função de hash que distribua as chaves uniformemente da tabela para minimizar as colisões.
* Segurança: Se estiver usando hashes para segurança (armazenamento de senha, integridade de dados), use funções fortes e criptográficas modernas (BCRYPT, Argon2, SHA-256, SHA-3) e técnicas de salga adequadas. Evite usar MD5 ou SHA-1 para segurança.
* desempenho: As funções de hash variam em seu desempenho. Profile seu código para determinar se o processo de hash é um gargalo e escolha uma função de hash adequada para suas necessidades.

Em resumo, um hash é uma ferramenta valiosa na programação, fornecendo uma maneira de representar dados em um formato compacto e de tamanho fixo para estruturas de dados eficientes, verificações de integridade, segurança e vários outros aplicativos. Escolher a função de hash certa e o manuseio de colisões efetivamente são importantes para alcançar o desempenho e a segurança ideais.

Anterior :

Próximo :
  Os artigos relacionados
·O que é hash de Lamport? 
·Qual é a Rubi Debugger Komodo 
·Onde você pode assistir Max e Ruby na internet? 
·Atributos de Valor Padrão Rails 
·Como usar a herança em Ruby 
·Como lidar com exceções em Ruby 
·Quais são transacionais Luminárias 
·Rails, Andaime e tipos de dados 
·O que são trilhos de janela? 
·Como criar arquivos usando Ruby FileUtils 
  Artigos em destaque
·Como substituir texto em um arquivo PHP 
·Como converter um nó regular para um nó jQuery 
·O que é o Script utilizado para depuração 
·A construção de uma montra com MySQL PHP 
·Como ler um arquivo com Java 
·Como Nomear um Session em PHP 
·Como exibir uma vírgula em C + + 
·Como detectar Retângulo Colisão em Java 
·Como fazer algo de Flash em Visual Basic 
·Java IRC Bot Tutorial 
Cop e direita © Rede de conhecimento computador https://ptcomputador.com Todos os Direitos Reservados