Generator și verificator bcrypt
Generează un hash bcrypt cu factor de cost de la 4 la 14, verifică o parolă față de un hash existent și vezi versiunea, costul, salt-ul și hash-ul.
Calculează hash-ul unei parole
- Versiune
- Cost
- Salt (22 de caractere)
- Hash (31 de caractere)
Verifică o parolă față de un hash
- Versiune
- Cost
- Salt (22 de caractere)
- Hash (31 de caractere)
Cum calculezi hash-ul unei parole cu bcrypt
- La Calculează hash-ul unei parole, scrie Parola. Un contor arată lungimea ei în octeți UTF-8 și te avertizează când depășește 72 de octeți.
- Alege Factorul de cost (4–14). Linia de sub el arată numărul de runde, de exemplu 10 → 2^10 = 1.024 de runde.
- Apasă Generează hash. O bară de progres urmărește calculul, iar pagina rămâne utilizabilă cât timp rulează. La final, instrumentul arată timpul consumat și Hash bcrypt, gata de copiat.
- Hash-ul este împărțit în părțile lui: Versiune, Cost, Salt (22 de caractere) și Hash (31 de caractere).
Ca să verifici o parolă față de un hash, scrie parola, lipește hash-ul (cel generat adineauri este completat automat) și apasă Verifică parola. Rezultatul spune dacă cele două corespund. Bifează Ascunde parolele pentru a masca ambele câmpuri de parolă.
Calculul rulează în browserul tău, cu biblioteca bcryptjs, încărcată doar când ai nevoie de ea prima dată. Nicio parolă și niciun hash nu sunt trimise nicăieri.
Cum funcționează bcrypt
bcrypt (Provos și Mazières, 1999) este o funcție de hash pentru parole construită pe cifrul Blowfish. Spre deosebire de SHA-256, este lent în mod intenționat, iar lentoarea poate fi reglată: factorul de cost este o putere a lui doi, deci fiecare +1 dublează munca. Un cost de 10 înseamnă 1.024 de iterații ale configurării costisitoare a cheii; un cost de 12 înseamnă 4.096. Lentoarea aceasta abia se simte când un utilizator se autentifică, dar face mult mai scumpă spargerea prin forță brută a unei baze de date furate.
Un hash precum $2b$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy se citește astfel:
$2b$: versiunea.$2a$și$2y$(PHP) sunt compatibile și pot fi verificate aici;$2x$marchează hash-uri dintr-o implementare veche, cu erori, și este refuzat.10: factorul de cost.- Următoarele 22 de caractere: un salt aleatoriu de 128 de biți, în alfabetul Base64 propriu al lui bcrypt (
./A-Za-z0-9). - Ultimele 31 de caractere: rezultatul de 184 de biți.
Deoarece salt-ul este aleatoriu și stocat în hash, calcularea hash-ului aceleiași parole de două ori dă două hash-uri diferite, iar ambele se verifică corect. De aceea o parolă se verifică cu o funcție de verificare, nu comparând hash-uri.
Alegerea costului
Alege cel mai mare cost pe care serverul tău și-l poate permite, păstrând autentificările rapide, de obicei în jur de un sfert de secundă per hash. OWASP recomandă un cost minim de 10 pentru bcrypt. Browserele rulează bcrypt în JavaScript, care este de câteva ori mai lent decât o implementare nativă de pe server: de la costul 12 instrumentul avertizează că poate dura de la una până la câteva secunde, iar fiecare pas în plus dublează timpul. Munca este împărțită în felii scurte, deci pagina nu îngheață.
Pentru sisteme noi, OWASP preferă acum Argon2id, bcrypt rămânând acceptabil acolo unde Argon2id nu este disponibil.
Limita de 72 de octeți
bcrypt folosește doar primii 72 de octeți ai parolei; tot ce urmează este ignorat fără niciun avertisment. Octeții nu sunt caractere: o literă cu diacritice ocupă 2 octeți în UTF-8, iar un emoji ocupă 4. Două parole lungi care au aceiași primi 72 de octeți produc același hash. Contorul de octeți te avertizează când o parolă este prea lungă. Unele sisteme aplică un pre-hash parolelor lungi (de exemplu HMAC-SHA256, apoi Base64) înainte de bcrypt; dacă faci asta, nu da niciodată rezultate binare brute, pentru că un octet nul ar încheia parola prea devreme în multe implementări.
Întrebări frecvente
De ce aceeași parolă dă un hash diferit de fiecare dată?
Fiecare hash primește un salt aleatoriu nou, care este stocat în interiorul hash-ului. Butonul Verifică parola citește salt-ul și costul din hash și recalculează rezultatul, așa că orice versiune se verifică corect.
Poate fi decriptat un hash bcrypt?
Nu. bcrypt este o funcție unidirecțională. Singura cale de a afla o parolă este să o ghicești și să calculezi hash-ul fiecărei încercări, exact lucrul pe care factorul de cost îl face lent.
Ce factor de cost ar trebui să folosesc?
Cel puțin 10, și mai mult dacă serverul tău rămâne destul de rapid. Măsoară pe hardware-ul tău de producție: timpul afișat aici reflectă JavaScript în browserul tău, de obicei mai lent decât un server.
Sunt hash-urile $2a$, $2b$ și $2y$ interschimbabile?
Pentru parole sub 256 de octeți dau același rezultat, iar instrumentul le verifică pe toate trei. $2b$ a corectat o eroare de depășire a lungimii din implementarea OpenBSD, iar $2y$ este numele din PHP pentru o implementare corectă.
Este sigur să scriu aici o parolă reală?
Totul rulează local și nimic nu este trimis sau stocat. Pentru conturi reale, este totuși o practică bună să testezi cu o parolă de probă, nu cu una pe care o folosești.
Instrumente similare
- Generator de hash Generează hash-uri MD5, SHA-1, SHA-256 și SHA-512 pentru text sau fișiere de orice dimensiune și verifică sumele de control. Totul rulează în browser.
- Generator de parole Generator gratuit de parole puternice și aleatorii, de 4 până la 128 de caractere, create în browser cu un generator sigur. Nimic nu este salvat sau trimis.
- Verificare putere parolă Testează cât de puternică este parola ta. Vezi scorul, timpul estimat de spargere în patru scenarii de atac și sfaturi concrete, verificate local în browser.
- Generator HMAC Calculează HMAC-SHA1, SHA-256, SHA-384 sau SHA-512 cu o cheie text, hex sau Base64, obține rezultat hex și Base64 și verifică semnătura unui webhook în browser.