Introdução
Esta extensão fornece funções que podem ser usadas para processamento direto ou incremental de mensagens de comprimento arbitrário usando uma variedade de algortimos de hash, incluindo a geração de valores HMAC e derivações chave, incluindo HKDF e PBKDF2.
De forma geral, existem três categorias de algoritmos de hash. Uma lista completa de algoritmos pode ser encontrada na documentação da função hash_algos().
-
Algoritmos de soma de verificação (como
"crc32b"
ou"adler32"
): Estes são usados para calcular somas de verificação, úteis em situações em que erros de transmissão precisam ser detectados. São geralmente muito rápidos. Estes algoritmos frequentemente geram valores que facilmente "previsíveis" ou podem ser manipulados para criar colisões, portanto são totalmente inadequados para uso em criptografia. - Algoritmos não criptográficos (como a família xxHash): Estes são frequentemente usados para calcular valores de hash para tabelas de hash, já que são projetados para gerar uma boa distribuição sobre strings de entrada arbitrárias. Também são geralmente rápidos, mas também inadequados para uso em criptografia.
-
Algoritmos criptográficos (como a família SHA-2):
Estes são projetados para gerar valores de hash que são representativos de suas
entradas mas não são previsíveis e nem sujeitos a colisões. O desempenho geralmente
é uma preocupação secundária, mas os equipamentos modernos frequentemente suportam um gerenciamento especial
para estes algoritmos que o PHP tenta fazer uso quando disponível.
O Centro de Recursos de Segurança Computacional do NIST tem uma
» explicação dos algoritmos
atualmente aprovados pelos padrões de processamento de informação dos Estados
Unidos.
Caution
Já foi provado que alguns dos primeiros algoritmos criptográficos, tais como
"md4"
,"md5"
e"sha1"
, estão sujeiros a ataques de colisão e por isso é recomendado que não sejam mais usados para aplicações de criptografia.
Consulte também as Perguntas Frequentes sobre Hash Seguro de Senhas para informação sobre melhores práticas para o uso de funções de hash ao lidar com senhas.