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

O que é um hash?



Na ciência da computação, um hash (também conhecido como código de hash , Valor de hash , ou hash soma ) é uma representação numérica de tamanho fixo de uma quantidade arbitrária de dados. É como uma impressão digital ou assinatura digital para obter uma informação.

Propriedades -chave de um hash:

* Saída de tamanho fixo: Independentemente do tamanho dos dados de entrada, a função de hash sempre produz uma saída de um comprimento predefinido específico (por exemplo, 256 bits, 160 bits).
* determinístico: A mesma entrada sempre produz a mesma saída de hash. Isso é crucial para consistência e confiabilidade.
* Resistência à colisão (idealmente): Deve ser extremamente difícil encontrar duas entradas diferentes que produzem a mesma saída de hash (uma "colisão"). Embora a resistência à colisão perfeita seja impossível na prática (devido ao princípio do pombo), as boas funções de hash minimizam a probabilidade de colisões.
* Função unidirecional (idealmente): Deve ser inviável computacionalmente reverter a função de hash, o que significa que você não pode determinar os dados de entrada original do seu valor de hash. Isso é importante para aplicativos de segurança.

Pense assim:

Imagine que você tem uma máquina (a função de hash) que pega qualquer objeto (os dados de entrada) e produz um rótulo exclusivo e de tamanho fixo (o valor do hash) para esse objeto. Os rótulos são muito mais curtos que os próprios objetos.

Como os hashes são usados ​​na programação de computador:



Os hashes têm inúmeras aplicações na programação de computadores, incluindo:

1. tabelas de hash (dicionários, mapas):

* Objetivo: As tabelas de hash são uma estrutura de dados fundamental usada para armazenamento eficiente e recuperação de dados com base em pares de valor-chave.
* como funciona:
* A chave é passada para uma função de hash.
* A função de hash calcula um valor de hash (um número inteiro) da chave.
* Esse valor de hash é usado como um índice em uma matriz (a tabela de hash).
* O valor correspondente é armazenado nesse índice.
* Benefícios: Fornece a complexidade de O (1) O (1) (tempo constante) para operações de inserção, exclusão e pesquisa, tornando-o incrivelmente rápido para pesquisar e recuperar dados.
* Exemplo:
`` `Python
my_dict ={} # um dicionário vazio (tabela de hash)
my_dict ["Apple"] =1 # inserir "maçã" como a chave e 1 como o valor
my_dict ["banana"] =2
Print (my_dict ["Apple"]) # saída:1 (pesquisa rápida)
`` `

2.

* Objetivo: Para verificar se os dados não foram corrompidos durante a transmissão ou armazenamento.
* como funciona:
* Calcule o hash de um arquivo ou bloco de dados antes da transmissão/armazenamento.
* Após a transmissão/recuperação, recalcule o hash.
* Compare os dois valores de hash. Se eles corresponderem, os dados provavelmente estarão intactos.
* Exemplos:
* Downloads de arquivo:MD5, SHA-256 SOMS são frequentemente fornecidas para verificar a integridade dos arquivos baixados.
* Protocolos de rede:Os mecanismos de detecção e correção de erros usam somas de verificação com base nas funções de hash.
* Por que é útil: Uma mudança de bit nos dados de entrada resultará em um valor de hash dramaticamente diferente.

3. criptografia:

* armazenamento de senha: Em vez de armazenar senhas diretamente, os sistemas armazenam o hash da senha. Dessa forma, mesmo que o banco de dados esteja comprometido, as senhas reais não são reveladas (pois é difícil reverter o hash). O sal é geralmente adicionado para evitar ataques de mesa de arco -íris.
* assinaturas digitais: O hash é usado para criar uma assinatura digital de um documento ou mensagem. O remetente hashes o documento e, em seguida, criptografa o hash com sua chave privada. O receptor descriptografa a assinatura com a chave pública do remetente e compara o hash resultante com seu próprio hash calculado do documento. Se eles correspondem, ele verifica a autenticidade e a integridade da mensagem.
* Códigos de autenticação de mensagem (MACs): Semelhante às assinaturas digitais, os Macs são usados ​​para verificar a autenticidade e a integridade das mensagens, mas usam uma chave secreta compartilhada em vez de pares de chave pública/privada.
* Tecnologia blockchain: O hashing é um componente central da tecnologia blockchain. Cada bloco contém o hash do bloco anterior, formando uma cadeia de blocos resistentes à adulteração.

4. cache:

* Objetivo: Para recuperar rapidamente dados acessados ​​com frequência.
* como funciona: A chave usada para acessar os dados é hash e o hash resultante é usado para identificar a localização dos dados em cache.
* Benefícios: Evita operações caras, como consultas de banco de dados ou cálculos complexos, armazenando resultados em um cache e recuperando -os rapidamente usando o hash.

5. Deduplicação de dados:

* Objetivo: Para reduzir o espaço de armazenamento, identificando e eliminando cópias duplicadas de dados.
* como funciona: Arquivos ou blocos de dados são hashed. Se dois arquivos diferentes tiverem o mesmo hash, é provável que eles sejam idênticos (embora as colisões sejam possíveis). Uma cópia é armazenada e a outra é substituída por um ponteiro para a cópia armazenada.

6. Indexação de banco de dados:

* Objetivo: Para acelerar as consultas do banco de dados.
* como funciona: O hash pode ser usado para criar um índice em uma coluna de tabela. Quando uma consulta procura um valor específico, o valor é hash e o índice é usado para localizar rapidamente as linhas correspondentes na tabela.

algoritmos comuns de hash:

* md5 (algoritmo de digestão da mensagem 5): Algoritmo mais antigo, agora considerado criptograficamente quebrado (vulnerável a colisões). Ainda usado para somas de verificação em alguns contextos, mas desencorajou para aplicativos sensíveis à segurança.
* sha-1 (algoritmo de hash seguro 1): Também considerado criptograficamente fraco. Desencorajado para novas aplicações.
* família SHA-2 (SHA-256, SHA-512, etc.): Mais seguro que o MD5 e o SHA-1. Amplamente utilizado para aplicações criptográficas e verificações de integridade de dados.
* SHA-3 (KECCAK): Um algoritmo diferente da família SHA-2, selecionado como vencedor de uma competição do NIST.
* bcrypt, scrypt, argon2: Projetado especificamente para hash de senha, esses algoritmos são mais caros computacionalmente e resistentes a ataques de força bruta.

Considerações importantes:

* Escolhendo a função de hash certa: A função de hash apropriada depende do aplicativo específico. As aplicações críticas de segurança requerem fortes funções de hash criptográfico (como SHA-256 ou mais recente). Para tabelas de hash, desempenho e resistência de colisão são fatores importantes.
* Manuseio de colisão: As tabelas de hash devem ter uma estratégia para lidar com colisões (quando duas chaves diferentes hash para o mesmo índice). As técnicas comuns de resolução de colisão incluem encadeamento separado e endereçamento aberto.
* Segurança: Ao usar hashes para fins de segurança, é crucial usar algoritmos fortes e bem-vindos de hash e tomar medidas para evitar ataques como ataques de mesa de arco-íris (por exemplo, usando salga).

Em resumo, o hash é uma técnica poderosa e versátil usada extensivamente na programação de computadores para tarefas que variam de armazenamento de dados e recuperação à verificação e segurança da integridade de dados. Compreender os princípios do hash é essencial para qualquer desenvolvedor de software.

Anterior :

Próximo : No
  Os artigos relacionados
·Tipos de Texto, inteiros , e de corda no Rails 
·Como desinstalar o Ruby 1.8.7 Com MacPorts 
·Como instalar Gitorious no CentOS 
·Como substituir uma classe de Ruby 
·Como analisar um arquivo HTML com Ruby 
·Java vs . Rubi 
·Como instalar o Ruby Gems em Linux 
·Como criar uma instrução em Ruby 
·Onde você pode assistir Max e Ruby na internet? 
·Como obtenho conjuntos de perguntas objetivas do Tally9…
  Artigos em destaque
·Tipos de Desenho Linha em Visual Basic 
·Como formatar um analisador em uma Cadeia Java 
·O que é um parâmetro no computador? 
·Como estender a vários modelos em Smarty 
·Como extrair números em uma consulta de Acesso 
·Como verificar dependências em Python 
·Depuração de um Função Pipeline no Oracle 
·Como selecionar MySQL PHP Matriz 
·Como usar o Eclipse para PHP 
·Para que é usado um conjunto de caracteres Unicode? 
Cop e direita © Rede de conhecimento computador https://ptcomputador.com Todos os Direitos Reservados