Ce face hash_pbkdf2
PBKDF2 transformă o parolă (ușor de ghicit) într-o cheie de lungime fixă, potrivită pentru criptare. Numărul mare de iterații face fiecare încercare a unui atacator lentă. Recomandările actuale pentru SHA-256 sunt de ordinul sutelor de mii de iterații.
Pentru salvarea parolelor utilizatorilor folosește password_hash. hash_pbkdf2 este pentru cazurile în care ai nevoie de o cheie (de exemplu pentru openssl_encrypt) sau de compatibilitate cu alt sistem care folosește PBKDF2.
Parametri
| Parametru | Descriere |
|---|---|
$algo |
Algoritmul HMAC, de exemplu "sha256". |
$password |
Parola. |
$salt |
Sarea, aleatorie și unică, salvată lângă rezultat. |
$iterations |
Numărul de iterații. |
$length |
Opțional. Lungimea rezultatului: în caractere hexazecimale, sau în octeți cu $binary = true. 0 înseamnă lungimea completă a algoritmului. |
$binary |
Opțional. true pentru rezultat binar. |
Ce returnează
Cheia derivată.
Exemple
Exemplul 1: Cheie de 32 de octeți pentru criptare
<?php
$sare = "sare-aleatorie"; // în practică: random_bytes(16), salvată lângă date
$cheie = hash_pbkdf2("sha256", "parola", $sare, 600000, 32, true);
echo strlen($cheie) . " octeți\n";
echo bin2hex($cheie);
Rezultat
32 octeți
6db7da456df6053ee59f63192209868878d0019ed571cbb78597155a624b7dc7
Exemplul 2: Lungimea în modul hexazecimal
Fără $binary, lungimea 32 înseamnă 32 de caractere hexazecimale, adică doar 16 octeți.
<?php
echo strlen(hash_pbkdf2("sha256", "parola", "sare", 1000, 32)) . "\n";
echo strlen(hash_pbkdf2("sha256", "parola", "sare", 1000));
Rezultat
32
64
Greșeli frecvente
- Ceri
$length = 32fără$binaryși crezi că ai o cheie de 32 de octeți. Ai 32 de caractere hexazecimale, adică 16 octeți. - Folosești puține iterații (de exemplu 1000). Parola poate fi ghicită de mii de ori mai repede.
Comenzi înrudite
password_hash: Creează un hash sigur pentru o parolă, gata de salvat în baza de date. Este modul corect de a stoca parole.hash_hkdf: Derivă una sau mai multe chei separate dintr-o cheie de bază puternică, cu algoritmul HKDF.hash_hmac / hash_equals: Calculează o semnătură HMAC: o amprentă care depinde și de o cheie secretă. Dovedește că datele nu au fost modificate.