W3docs

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): string

A função recebe dois parâmetros:

ParâmetroObrigatórioDescrição
$stringSimA string de entrada a ser processada pelo hash.
$binaryNãoSe 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()

php— editable, runs on the server

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á:

2ef7bde608ce5404e97d5f042f95f89f1c232871

Nã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
20

As 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.

Prática

Prática
Qual é o propósito da função sha1() em PHP?
Qual é o propósito da função sha1() em PHP?
Was this page helpful?