sha1()
Artigo sobre a função PHP sha1(), usada para calcular o hash SHA-1 de uma string, útil para gerar identificadores únicos.
A função PHP sha1() calcula o hash SHA-1 de uma string. O SHA-1 ("Secure Hash Algorithm 1") recebe uma entrada de qualquer comprimento e produz um digest fixo de 160 bits — uma impressão digital hexadecimal de 40 caracteres. A mesma entrada sempre produz o mesmo hash, mas não é possível reverter o hash para recuperar a string original.
Esta página aborda a sintaxe de sha1(), ambos os seus parâmetros, o formato de saída, casos de uso práticos e — de forma importante — quando você não deve usá-la.
Sintaxe
sha1(string $string, bool $binary = false): stringA função recebe dois parâmetros:
| Parâmetro | Obrigatório | Descrição |
|---|---|---|
$string | Sim | A string de entrada a ser processada pelo hash. |
$binary | Não | Se true, retorna 20 bytes binários brutos. Se false (padrão), retorna uma string hexadecimal de 40 caracteres. |
Retorna o digest SHA-1 de $string como uma string.
Exemplo básico
Exemplo do PHP sha1()
Neste exemplo, temos uma variável string $string que queremos processar com hash. Usamos a função sha1() para calcular o hash SHA-1 da string.
A saída deste código será:
2ef7bde608ce5404e97d5f042f95f89f1c232871Não importa o comprimento da entrada, a saída hexadecimal sempre tem exatamente 40 caracteres. Uma string vazia ainda retorna um hash válido (da39a3ee5e6b4b0d3255bfef95601890afd80709).
Saída hexadecimal vs. binária bruta
Por padrão, sha1() retorna o digest como texto hexadecimal legível. Defina o segundo parâmetro como true para obter os 20 bytes binários brutos — metade do tamanho, o que é útil quando você armazena o hash em uma coluna de banco de dados compacta BINARY(20) em vez de um campo de texto de 40 caracteres.
Exemplo com o parâmetro $binary
<?php
$string = 'Hello World!';
echo strlen(sha1($string)); // 40 (hexadecimal string)
echo "\n";
echo strlen(sha1($string, true)); // 20 (raw binary bytes)
?>40
20As duas formas carregam a mesma informação; bin2hex(sha1($string, true)) produz exatamente o mesmo valor que sha1($string).
Quando usar sha1()
O SHA-1 ainda é aceitável para tarefas não relacionadas à segurança, onde você precisa apenas de uma impressão digital rápida e determinística:
- Chaves de cache — transforme uma URL longa ou consulta em uma chave curta e de comprimento fixo.
- Detecção de alterações — compare o hash de um valor agora com um valor posterior para verificar se houve mudança, sem precisar armazenar o valor inteiro.
- Deduplicação — agrupe conteúdo idêntico pelo seu digest.
Para calcular o hash do conteúdo de um arquivo em vez de uma string, use sha1_file(). A função de propósito geral hash() do PHP também permite escolher algoritmos mais fortes, como sha256.
Quando não usar sha1()
O SHA-1 é uma função de hash criptográfica, não um método de criptografia — não há como "descriptografar" o resultado para obter o valor original. Mais importante ainda, o SHA-1 está criptograficamente comprometido: existem ataques de colisão práticos, portanto ele não deve ser usado em contextos onde a segurança depende do hash.
Não use sha1() para:
- Armazenamento de senhas. Use
crypt()/password_hash()do PHP com bcrypt ou Argon2, que adicionam sal e um fator de custo deliberadamente lento. - Assinaturas digitais ou verificações de integridade que um atacante possa tentar falsificar — prefira SHA-256 ou mais forte via
hash('sha256', $data).
A função relacionada md5() compartilha as mesmas fraquezas e a mesma regra: adequada para impressões digitais, mas insegura para fins de segurança.
Resumo
A função sha1() é uma ferramenta direta para gerar valores de hash de comprimento fixo em PHP. Ao compreender sua saída hexadecimal de 40 caracteres, a opção de binário bruto e suas limitações de segurança, você pode usá-la com confiança para geração de impressões digitais, enquanto recorre a password_hash() ou SHA-256 quando a segurança real está em jogo.