Start · Sprachen · PHP · Referenz · crc32

crc32

Funktion

Berechnet den 32-Bit-CRC-Prüfwert (Cyclic Redundancy Check) eines Strings als vorzeichenbehaftete Ganzzahl.

seit PHP 4.0.1 Kategorie: string

Signatur

crc32(string $string): int

Beschreibung

crc32() berechnet den polynomischen CRC32-Prüfwert des übergebenen Strings. Das Ergebnis ist eine vorzeichenbehaftete 32-Bit-Ganzzahl (int), die auf 32-Bit-Plattformen negativ sein kann, auf 64-Bit-Plattformen jedoch immer positiv ist, da PHP dort 64-Bit-Integer verwendet.

Die Funktion eignet sich gut für schnelle Integritätsprüfungen von Daten, etwa zum Vergleichen zweier Strings ohne den vollständigen Inhalt übertragen zu müssen, oder zur einfachen Hash-basierten Partitionierung. CRC32 ist kein kryptografischer Hash und daher nicht für Sicherheitszwecke wie Passwort-Hashing geeignet.

Um einen plattformunabhängigen, stets positiven Wert zu erhalten, kann man den Rückgabewert mit sprintf('%u', crc32($str)) als vorzeichenlosen Integer formatieren oder hash('crc32b', $str) für eine hexadezimale Darstellung verwenden.

  • Schnell und ressourcenschonend für große Mengen kurzer Strings.
  • Kollisionen sind möglich – für sicherheitskritische Prüfsummen hash() mit SHA-256 oder ähnlichem verwenden.

Parameter

Name Typ Default Beschreibung
$string Pflicht string Der Eingabe-String, für den der CRC32-Prüfwert berechnet werden soll.

Rückgabewert

Typ
int
Beschreibung
Gibt den CRC32-Prüfwert als vorzeichenbehaftete 32-Bit-Ganzzahl zurück. Auf 64-Bit-Plattformen ist der Wert stets im positiven Bereich, auf 32-Bit-Plattformen kann er negativ sein.

Beispiele

Einfache CRC32-Prüfsumme berechnen

<?php
$str = 'Hallo Welt';
$checksum = crc32($str);
echo $checksum . PHP_EOL;

// Plattformunabhängige vorzeichenlose Darstellung
echo sprintf('%u', $checksum) . PHP_EOL;
?>
3985698964 3985698964

Dateiintegrität prüfen (einfache Änderungserkennung)

<?php
$original = 'Dies ist der Inhalt meiner Datei.';
$empfangen = 'Dies ist der Inhalt meiner Datei.';

if (crc32($original) === crc32($empfangen)) {
    echo 'Inhalt ist identisch.' . PHP_EOL;
} else {
    echo 'Inhalt wurde verändert!' . PHP_EOL;
}

// Vergleich mit verändertem String
$veraendert = 'Dies ist der Inhalt meiner Datei!';
if (crc32($original) === crc32($veraendert)) {
    echo 'Identisch.' . PHP_EOL;
} else {
    echo 'Unterschied erkannt.' . PHP_EOL;
}
?>
Inhalt ist identisch. Unterschied erkannt.

Hexadezimale CRC32-Darstellung mit hash()

<?php
$str = 'Hallo Welt';

// Vorzeichenloser Dezimalwert
echo sprintf('%u', crc32($str)) . PHP_EOL;

// Hexadezimale Darstellung (konsistent mit Tools wie zlib)
echo hash('crc32b', $str) . PHP_EOL;
?>
3985698964 ed6e9614

// Wichtig · Fallstricke

Sicherheitshinweis: CRC32 ist kein kryptografischer Hash. Er ist anfällig für Kollisionen und darf nicht für Passwort-Hashing, digitale Signaturen oder sicherheitsrelevante Integritätsprüfungen verwendet werden. Für solche Zwecke sind hash('sha256', ...) oder password_hash() zu bevorzugen.

Plattformunterschiede: Auf 32-Bit-Systemen kann der Rückgabewert negativ sein. Für portable, vorzeichenlose Werte immer sprintf('%u', crc32($str)) oder hash('crc32b', $str) verwenden.

Hinweis zu hash('crc32b', ...): Die Ergebnisse von crc32() und hash('crc32b', ...) repräsentieren denselben Wert, jedoch in unterschiedlicher Darstellung (Integer vs. Hex-String).