Ce face hash
hash este funcția generală pentru amprente. Primul parametru este numele algoritmului. Pentru securitate (verificarea integrității, semnături) alege sha256 sau mai puternic. Pentru viteză, fără cerințe de securitate (chei de cache), xxh3 sau crc32b sunt mult mai rapide.
hash_algos() returnează lista algoritmilor disponibili pe server. hash_file($algo, $fisier) calculează amprenta unui fișier, pe bucăți, fără să îl încarce tot în memorie.
Parametri
| Parametru | Descriere |
|---|---|
$algo |
Numele algoritmului, de exemplu "sha256". Un nume necunoscut aruncă ValueError. |
$data |
Textul pentru care se calculează amprenta. |
$binary |
Opțional. true returnează octeți binari în loc de text hexazecimal. |
$options |
Opțional. Opțiuni pentru unii algoritmi, de exemplu ["seed" => 123] pentru xxHash. |
Ce returnează
Amprenta, ca text hexazecimal (sau binar).
Exemple
Exemplul 1: SHA-256 și alți algoritmi
<?php
echo hash("sha256", "dexblog") . "\n";
echo hash("xxh3", "dexblog") . "\n";
echo hash("crc32b", "dexblog");
Rezultat
312ec798280e370f7bf8e9d933ad7138a69592a6dbad34a4b51e166b7e644f11
711dbc632b95e0f5
925f0c30
Exemplul 2: Algoritmii disponibili
<?php
$algoritmi = hash_algos();
echo implode(", ", array_slice($algoritmi, 0, 8)) . "...\n";
var_dump(in_array("sha3-256", $algoritmi));
Rezultat
md2, md4, md5, sha1, sha224, sha256, sha384, sha512/224...
bool(true)
Exemplul 3: Amprenta unui fișier descărcat
Compari amprenta calculată cu cea publicată de autorul fișierului. Dacă diferă, fișierul a fost stricat sau modificat.
<?php
file_put_contents("instalare.zip", "conținutul arhivei");
$asteptat = "7512493d610addbc8ad628ddd11459710820b4624ee719bc623b82eb30b8b149";
$calculat = hash_file("sha256", "instalare.zip");
echo $calculat === $asteptat ? "Fișier intact" : "Atenție: amprenta diferă!";
Rezultat
Fișier intact
Greșeli frecvente
- Folosești
hash("sha256", $parola)pentru parole. SHA-256 este prea rapid și poate fi spart prin încercări în masă. Pentru parole foloseștepassword_hash. - Compari o amprentă secretă (de exemplu un token) cu
===. Pentru valori secrete foloseștehash_equals, care nu dezvăluie prin timpul de răspuns câte caractere se potrivesc.
Comenzi înrudite
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.md5: Calculează amprenta MD5 a unui text: 32 de caractere hexazecimale. Bună pentru sume de control, nu pentru parole.sha1: Calculează amprenta SHA-1 a unui text: 40 de caractere hexazecimale. Nu mai este recomandată pentru securitate.password_hash: Creează un hash sigur pentru o parolă, gata de salvat în baza de date. Este modul corect de a stoca parole.