W3docs

sha1()

Articolo sulla funzione PHP sha1(), usata per calcolare l'hash SHA-1 di una stringa, utile per generare identificatori univoci.

La funzione PHP sha1() calcola l'hash SHA-1 di una stringa. SHA-1 ("Secure Hash Algorithm 1") accetta input di qualsiasi lunghezza e produce un digest fisso a 160 bit — un'impronta digitale esadecimale di 40 caratteri. Lo stesso input produce sempre lo stesso hash, ma non è possibile invertire l'hash per risalire alla stringa originale.

Questa pagina illustra la sintassi di sha1(), entrambi i suoi parametri, il formato dell'output, i casi d'uso pratici e — aspetto importante — quando non utilizzarla.

Sintassi

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

La funzione accetta due parametri:

ParametroObbligatorioDescrizione
$stringLa stringa di input da sottoporre all'hash.
$binaryNoSe true, restituisce 20 byte binari grezzi. Se false (valore predefinito), restituisce una stringa esadecimale di 40 caratteri.

Restituisce il digest SHA-1 di $string come stringa.

Esempio di base

Esempio di PHP sha1()

php— editable, runs on the server

In questo esempio, abbiamo una variabile stringa $string di cui vogliamo calcolare l'hash. Utilizziamo la funzione sha1() per calcolare l'hash SHA-1 della stringa.

L'output di questo codice sarà:

2ef7bde608ce5404e97d5f042f95f89f1c232871

Indipendentemente dalla lunghezza dell'input, l'output esadecimale è sempre esattamente di 40 caratteri. Anche una stringa vuota restituisce un hash valido (da39a3ee5e6b4b0d3255bfef95601890afd80709).

Output esadecimale vs. binario grezzo

Per impostazione predefinita sha1() restituisce il digest come testo esadecimale leggibile. Impostare il secondo parametro su true per ottenere invece i 20 byte binari grezzi — la metà della dimensione, utile quando si memorizza l'hash in una colonna del database compatta BINARY(20) anziché in un campo di testo a 40 caratteri.

Esempio con il parametro $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

Le due forme contengono le stesse informazioni; bin2hex(sha1($string, true)) produce esattamente lo stesso valore di sha1($string).

Quando usare sha1()

SHA-1 è ancora accettabile per attività non legate alla sicurezza in cui si ha bisogno solo di un'impronta digitale rapida e deterministica:

  • Chiavi di cache — trasforma un URL lungo o una query in una chiave breve di lunghezza fissa.
  • Rilevamento delle modifiche — confronta l'hash di un valore attuale con uno precedente per verificare se è cambiato, senza dover memorizzare l'intero valore.
  • Deduplicazione — raggruppa contenuti identici in base al loro digest.

Per calcolare l'hash del contenuto di un file invece di una stringa, usa sha1_file(). La funzione generale hash() di PHP consente inoltre di scegliere algoritmi più robusti come sha256.

Quando non usare sha1()

SHA-1 è una funzione hash crittografica, non un metodo di cifratura — non esiste alcun modo per "decifrare" il valore e risalire all'originale. Ancora più importante, SHA-1 è crittograficamente compromessa: esistono attacchi pratici alle collisioni, pertanto non deve essere utilizzata quando la sicurezza dipende dall'hash.

Non usare sha1() per:

  • Memorizzazione delle password. Usa crypt() / password_hash() di PHP con bcrypt o Argon2, che aggiungono il salting e un fattore di costo volutamente lento.
  • Firme digitali o controlli di integrità che un attaccante potrebbe tentare di falsificare — preferire SHA-256 o algoritmi più robusti tramite hash('sha256', $data).

La funzione correlata md5() condivide le stesse debolezze e la stessa regola: adatta per le impronte digitali, non sicura per la sicurezza.

La funzione sha1() è uno strumento semplice per generare valori hash a lunghezza fissa in PHP. Comprendendo il suo output esadecimale a 40 caratteri, l'opzione binaria grezza e i suoi limiti di sicurezza, è possibile utilizzarla con fiducia per il fingerprinting, ricorrendo invece a password_hash() o SHA-256 quando la sicurezza reale è in gioco.

Esercitazione

Pratica
Qual è lo scopo della funzione sha1() in PHP?
Qual è lo scopo della funzione sha1() in PHP?
Was this page helpful?