crc32 în PHP

Securitate și hash PHP 4.0.1+

Calculează suma de control CRC32 a unui text, ca număr întreg. Rapidă, dar doar pentru detectarea erorilor.

Sintaxă
crc32(string $string): int

Ce face crc32

CRC32 este o sumă de control folosită în arhivele ZIP, în rețea și în fișierele PNG pentru a detecta date stricate la transfer. crc32 o returnează ca număr întreg pozitiv.

Este foarte rapidă și utilă pentru a împărți date în grupuri (de exemplu, să repartizezi utilizatori pe servere sau în variante de test A/B). Nu are nicio valoare pentru securitate: coliziunile se găsesc ușor.

Parametri

Parametru Descriere
$string Textul pentru care se calculează suma.

Ce returnează

Suma de control, ca număr întreg.

Exemple

Exemplul 1: Ca număr și ca text hexazecimal

hash("crc32b", ...) dă aceeași valoare, direct în format hexazecimal.

<?php
$suma = crc32("dexblog");

echo $suma . "\n";
echo dechex($suma) . "\n";
echo hash("crc32b", "dexblog");

Rezultat

2455702576
925f0c30
925f0c30

Exemplul 2: Împărțirea stabilă în grupuri

Același email ajunge mereu în același grup, la fiecare rulare.

<?php
foreach (["ana@exemplu.ro", "mihai@exemplu.ro", "ioana@exemplu.ro"] as $email) {
    $grup = crc32($email) % 2 === 0 ? "A" : "B";
    echo "$email => varianta $grup\n";
}

Rezultat

ana@exemplu.ro => varianta B
mihai@exemplu.ro => varianta A
ioana@exemplu.ro => varianta A

Greșeli frecvente

  • Folosești crc32 ca identificator unic. Cu multe valori, coliziunile apar repede: două texte diferite primesc același număr.

Comenzi înrudite

  • md5: Calculează amprenta MD5 a unui text: 32 de caractere hexazecimale. Bună pentru sume de control, nu pentru parole.
  • hash: Calculează amprenta unui text cu algoritmul ales: sha256, sha512, sha3-256, xxh3 și multe altele.
  • sha1: Calculează amprenta SHA-1 a unui text: 40 de caractere hexazecimale. Nu mai este recomandată pentru securitate.