hash_hmac_file în PHP

Securitate și hash PHP 5.1.2+

Calculează semnătura HMAC a conținutului unui fișier, cu o cheie secretă, fără să îl citești tot în memorie.

Sintaxă
hash_hmac_file(string $algo, string $filename, string $key, bool $binary = false): string|false

Ce face hash_hmac_file

hash_hmac_file dă același rezultat ca hash_hmac($algo, file_get_contents($fisier), $cheie), dar citește fișierul pe bucăți. Este potrivită pentru fișiere mari: backup-uri, exporturi, arhive trimise între servere.

Cine primește fișierul și știe cheia recalculează semnătura și o compară cu hash_equals. Dacă fișierul a fost modificat, semnăturile diferă.

Parametri

Parametru Descriere
$algo Algoritmul, de obicei "sha256".
$filename Calea către fișier.
$key Cheia secretă.
$binary Opțional. true pentru rezultat binar.

Ce returnează

Semnătura, ca text hexazecimal, sau false dacă fișierul nu poate fi citit.

Exemple

Exemplul 1: Semnătura unui fișier și verificarea ei

<?php
$cheie = "cheie-secreta";
file_put_contents("export.csv", "nume,oras\nAna,Iași\n");

$semnatura = hash_hmac_file("sha256", "export.csv", $cheie);
echo $semnatura . "\n";
var_dump(hash_equals($semnatura, hash_hmac("sha256", file_get_contents("export.csv"), $cheie)));

file_put_contents("export.csv", "Mihai,Cluj\n", FILE_APPEND);
var_dump(hash_equals($semnatura, hash_hmac_file("sha256", "export.csv", $cheie)));

Rezultat

5e40dcd5c6df8abbf1e7421c95d5528bd1cdb8aad5879cc1599d04d3487d9d52
bool(true)
bool(false)

Greșeli frecvente

  • Trimiți semnătura și cheia împreună cu fișierul. Cine are cheia poate semna orice; cheia trebuie să rămână secretă.

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.
  • hash: Calculează amprenta unui text cu algoritmul ales: sha256, sha512, sha3-256, xxh3 și multe altele.