W3docs

sha1()

Notre article présente la fonction PHP sha1(), qui calcule le hachage SHA-1 d'une chaîne, utile pour générer des identifiants uniques.

La fonction PHP sha1() calcule le hachage SHA-1 d'une chaîne. SHA-1 (« Secure Hash Algorithm 1 ») prend une entrée de longueur quelconque et produit un condensé fixe de 160 bits — une empreinte hexadécimale de 40 caractères. La même entrée produit toujours le même hachage, mais il est impossible de retrouver la chaîne originale à partir du hachage.

Cette page couvre la syntaxe de sha1(), ses deux paramètres, le format de sortie, les cas d'utilisation pratiques et — point important — les situations où vous ne devriez pas l'utiliser.

Syntaxe

sha1(string $string, bool $binary = false): string

La fonction accepte deux paramètres :

ParamètreObligatoireDescription
$stringOuiLa chaîne d'entrée à hacher.
$binaryNonSi true, retourne 20 octets binaires bruts. Si false (valeur par défaut), retourne une chaîne hexadécimale de 40 caractères.

Elle retourne le condensé SHA-1 de $string sous forme de chaîne.

Exemple de base

Exemple de PHP sha1()

php— editable, runs on the server

Dans cet exemple, nous disposons d'une variable chaîne $string que nous souhaitons hacher. Nous utilisons la fonction sha1() pour calculer le hachage SHA-1 de la chaîne.

La sortie de ce code sera :

2ef7bde608ce5404e97d5f042f95f89f1c232871

Quelle que soit la longueur de l'entrée, la sortie hexadécimale fait toujours exactement 40 caractères. Une chaîne vide retourne quand même un hachage valide (da39a3ee5e6b4b0d3255bfef95601890afd80709).

Sortie hexadécimale ou binaire brute

Par défaut, sha1() retourne le condensé sous forme de texte hexadécimal lisible. Définissez le second paramètre à true pour obtenir les 20 octets binaires bruts à la place — deux fois plus compact, ce qui est utile pour stocker le hachage dans une colonne de base de données BINARY(20) plutôt qu'un champ texte de 40 caractères.

Exemple avec le paramètre $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

Les deux formes contiennent la même information ; bin2hex(sha1($string, true)) produit exactement la même valeur que sha1($string).

Quand utiliser sha1()

SHA-1 reste acceptable pour les tâches non liées à la sécurité où vous avez seulement besoin d'une empreinte rapide et déterministe :

  • Clés de cache — transformer une longue URL ou requête en une clé courte de longueur fixe.
  • Détection de changements — comparer le hachage d'une valeur à un instant donné avec celui d'un instant ultérieur pour savoir si elle a changé, sans stocker la valeur entière.
  • Déduplication — regrouper un contenu identique par son condensé.

Pour hacher le contenu d'un fichier plutôt qu'une chaîne, utilisez sha1_file(). La fonction généraliste hash() de PHP vous permet également de choisir des algorithmes plus robustes comme sha256.

Quand ne pas utiliser sha1()

SHA-1 est une fonction de hachage cryptographique, et non une méthode de chiffrement — il est impossible de « déchiffrer » la valeur pour retrouver l'original. Plus important encore, SHA-1 est cryptographiquement compromis : des attaques par collision pratiques existent, et il ne doit donc pas être utilisé là où la sécurité repose sur le hachage.

N'utilisez pas sha1() pour :

  • Le stockage de mots de passe. Utilisez crypt() / password_hash() de PHP avec bcrypt ou Argon2, qui ajoutent un sel et un facteur de coût délibérément lent.
  • Les signatures numériques ou les vérifications d'intégrité qu'un attaquant pourrait tenter de falsifier — préférez SHA-256 ou plus robuste via hash('sha256', $data).

La fonction associée md5() présente les mêmes faiblesses et la même règle : acceptable pour les empreintes, non sécurisée pour la sécurité.

Résumé

La fonction sha1() est un outil simple pour générer des valeurs de hachage de longueur fixe en PHP. En comprenant sa sortie hexadécimale de 40 caractères, l'option binaire brute et ses limitations en matière de sécurité, vous pouvez l'utiliser en toute confiance pour les empreintes, tout en vous tournant vers password_hash() ou SHA-256 quand la sécurité est réellement en jeu.

Pratique

Pratique
Quel est le rôle de la fonction sha1() en PHP ?
Quel est le rôle de la fonction sha1() en PHP ?
Was this page helpful?