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): stringLa 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
Qui $string contiene del testo e md5() ne restituisce il digest esadecimale. L'output è la stringa hex di 32 caratteri:
ed076287532e86365e841e92bfc50d8cLo 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:
ed076287532e86365e841e92bfc50d8cQuando 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, ehash('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 dimd5(..., true)in una stringa hex leggibile.