W3docs

md5()

Articolo sulla funzione PHP md5(), usata per calcolare l'hash MD5 di una stringa. Sintassi, parametri, esempi pratici e quando usarla in PHP.

La funzione PHP md5() calcola l'hash MD5 di una stringa. MD5 (Message-Digest Algorithm 5) è una funzione unidirezionale: trasforma qualsiasi input in un valore fisso a 128 bit e non è possibile risalire alla stringa originale dal risultato. Questa pagina illustra la sintassi, i parametri, esempi eseguibili, i casi in cui MD5 è ancora appropriato e quelli in cui è necessario utilizzare qualcosa di più sicuro.

Sintassi

md5(string $str, bool $raw_output = false): string

La funzione accetta due parametri:

  • $str — la stringa di input da sottoporre all'hashing.
  • $raw_output — boolean opzionale. Quando è false (valore predefinito), md5() restituisce una stringa esadecimale minuscola di 32 caratteri. Quando è true, restituisce l'hash binario grezzo di 16 byte.

Il valore restituito ha sempre la stessa lunghezza per una data modalità, indipendentemente dalla lunghezza dell'input — una stringa di un carattere e un file da un megabyte producono entrambi un digest esadecimale di 32 caratteri.

Esempio base

php— editable, runs on the server

Qui $string contiene del testo e md5() ne restituisce il digest esadecimale. L'output è la stringa hex di 32 caratteri:

ed076287532e86365e841e92bfc50d8c

Lo stesso input produce sempre lo stesso digest, quindi MD5 è deterministico — utile per confrontare o indicizzare dati, ma ciò significa anche che un aggressore può precalcolare gli hash di valori comuni.

Output binario grezzo

<?php
$hash = md5("Hello World!", true);
echo bin2hex($hash);
?>

Quando $raw_output è true, md5() restituisce l'hash binario grezzo di 16 byte invece dell'hex. Ciò corrisponde alla metà della dimensione della forma esadecimale, il che è comodo quando si memorizza il digest in una colonna di database BINARY(16). Qui lo passiamo tramite bin2hex() per stamparlo, quindi l'output è identico alla modalità predefinita:

ed076287532e86365e841e92bfc50d8c

Quando usare MD5 (e quando no)

MD5 è veloce ma crittograficamente compromesso — le collisioni (due input diversi con lo stesso hash) possono essere prodotte deliberatamente. La scelta dipende dal caso d'uso:

  • Accettabile: checksum non di sicurezza, chiavi di cache, deduplicazione di file o corrispondenza con un sistema legacy che già memorizza digest MD5.
  • Non accettabile: archiviazione di password e firme digitali. Usa password_hash() per le password, e hash('sha256', ...) o algoritmi più robusti per l'integrità che un aggressore potrebbe attaccare.
<?php
// Bad — never store passwords like this:
$bad = md5($password);

// Good — purpose-built, salted, slow on purpose:
$good = password_hash($password, PASSWORD_DEFAULT);

Attenzione: Non usare md5() per l'hashing delle password o le firme digitali. È appropriato solo per checksum non di sicurezza o compatibilità con sistemi legacy.

Funzioni correlate

  • sha1() — produce un hash più lungo a 160 bit; anch'esso non è più resistente alle collisioni.
  • crc32() — un checksum veloce a 32 bit per il rilevamento degli errori, non per l'hashing.
  • bin2hex() — converte l'output binario grezzo di md5(..., true) in una stringa hex leggibile.

Esercitati

Pratica
Qual è la funzione principale di md5() in PHP?
Qual è la funzione principale di md5() in PHP?
Was this page helpful?