Impostazioni
Genera hash bcrypt per memorizzare le password e verifica se una password corrisponde a un hash esistente. In modalità Genera scegli costo e versione; in modalità Verifica incolla l'hash e la password da controllare. Il risultato mostra ogni parte dell'hash e quanto tempo ha richiesto il calcolo.

Un hash bcrypt non si può "decriptare": per sapere se una password è corretta, usa la modalità Verifica. Tutto viene calcolato nel tuo browser e la password non viene inviata a nessun server.

Parametri
Tra 4 e 15

Versione attuale. La generano OpenBSD, Node.js, Python, Go e Rust.

Ogni punto di costo raddoppia il tempo di calcolo. OWASP consiglia almeno 10; l'ideale è il valore più alto che il tuo server calcola in circa 250 ms.

0 di 72 byte

Come funziona

bcrypt è una funzione di hash progettata per memorizzare le password. A differenza di SHA-256 o MD5, che si calcolano in microsecondi, bcrypt è lenta di proposito: così chi ruba un database impiega anni a provare password con la forza bruta.

Ogni hash contiene tutto il necessario per verificarlo: la versione dell'algoritmo, il costo e un salt casuale di 128 bit. Per questo la stessa password produce ogni volta un hash diverso e non serve memorizzare il salt a parte.

Il costo è il logaritmo in base 2 del numero di round: con costo 10 si calcolano 1024 round e con costo 12, 4096. Aumentarlo di un punto raddoppia il tempo di calcolo, il che permette di stare al passo con la potenza crescente dell'hardware senza cambiare algoritmo.

Esempi

rasmuslerdorf$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1aL'esempio di password_verify() del manuale PHP: incollalo in modalità Verifica con quella password e corrisponde.
abc$2a$06$If6bvum7DFjUnE9p2uDeDu0YHzrHM6tf.iqN8.yx.jNN1ILEf7h0iUn vettore di test di jBCrypt con costo 6. I primi 22 caratteri dopo il costo sono il salt; i 31 restanti, il valore hash.

Casi d'uso

  • Creare l'hash della password iniziale di un utente amministratore per inserirlo direttamente nel database.
  • Verificare se una password corrisponde all'hash salvato quando un utente non riesce ad accedere.
  • Generare hash di prova per fixture, seed o test automatizzati di un'applicazione Laravel, Spring, Django o Node.js.
  • Misurare quanto impiega ogni costo per scegliere il valore adatto prima di configurarlo sul server.
  • Creare voci per i file .htpasswd di Apache, che accettano hash bcrypt con prefisso $2y$.

Domande frequenti

Si può decriptare un hash bcrypt?

No. bcrypt è una funzione unidirezionale: non esiste modo di ricavare la password dall'hash. L'unica possibilità è provare password candidate e vedere se qualcuna corrisponde, ed è proprio questo che bcrypt rende lento.

Che differenza c'è tra $2a$, $2b$ e $2y$?

Per le password normali tutte e tre calcolano lo stesso risultato. $2a$ è la versione originale; $2y$ è stata introdotta da PHP nel 2011 per distinguere i suoi hash da quelli di un'implementazione difettosa; $2b$ è stata adottata da OpenBSD nel 2014 correggendo un altro bug con password di oltre 255 caratteri. Quasi tutte le librerie accettano le tre versioni in fase di verifica.

Quale costo conviene usare?

OWASP consiglia almeno 10. L'ideale è il valore più alto che il tuo server riesce a calcolare in circa 250 ms per ogni accesso. Spring Security usa 10 di default; Laravel 11 e PHP 8.4 hanno portato il loro a 12.

Perché bcrypt ignora ciò che supera i 72 byte?

L'algoritmo usa la password come chiave di Blowfish, che ammette al massimo 72 byte. Il resto viene scartato senza avviso, quindi due password che condividono i primi 72 byte producono lo stesso hash. I caratteri accentati o le emoji occupano da due a quattro byte, per questo lo strumento conta i byte e non i caratteri.

È meglio bcrypt o Argon2?

Argon2id è oggi l'algoritmo consigliato per i nuovi sistemi perché, oltre a essere lento, usa molta memoria, il che rende più costosi gli attacchi con GPU. Ciononostante bcrypt resta sicuro con un costo adeguato ed è quello predefinito in PHP, Laravel, Spring e Ruby on Rails.

La mia password viene inviata a qualche server?

No. L'hash e la verifica vengono calcolati nel tuo browser e la password non lascia mai il tuo dispositivo; non viene nemmeno inclusa nel link per condividere lo strumento.