Start · Sprachen · PHP · Referenz · mhash_get_block_size

mhash_get_block_size

Funktion

Gibt die Blockgröße (in Bytes) des angegebenen Hash-Algorithmus zurück.

seit PHP 4.0.0 Kategorie: crypto

Signatur

mhash_get_block_size(int $hash): int|false

Beschreibung

mhash_get_block_size() ermittelt die Blockgröße eines Hash-Algorithmus in Bytes. Der Algorithmus wird über eine ganzzahlige Konstante identifiziert, z. B. MHASH_MD5, MHASH_SHA256 oder MHASH_SHA512.

Die Blockgröße entspricht der Länge des erzeugten Hash-Wertes in Bytes. Diese Information ist beispielsweise nützlich, wenn Puffer oder Arrays passend dimensioniert werden sollen, oder wenn eine HMAC-Berechnung manuell umgesetzt wird, bei der die Hash-Ausgabelänge bekannt sein muss.

Die Funktion gehört zur mhash-Erweiterung, die in PHP 5.3.0 in die hash-Erweiterung integriert wurde. Für neuen Code wird empfohlen, stattdessen die Funktion hash_hmac() oder hash() aus der modernen hash-Erweiterung zu verwenden.

Falls ein ungültiger oder nicht unterstützter Hash-Algorithmus übergeben wird, gibt die Funktion false zurück.

Parameter

Name Typ Default Beschreibung
$hash Pflicht int Eine MHASH_*-Konstante, die den gewünschten Hash-Algorithmus identifiziert, z. B. MHASH_SHA256 oder MHASH_MD5.

Rückgabewert

Typ
int|false
Beschreibung
Gibt die Blockgröße des Hash-Algorithmus in Bytes als int zurück. Falls der angegebene Hash-Algorithmus unbekannt oder ungültig ist, wird false zurückgegeben.

Beispiele

Blockgröße verschiedener Hash-Algorithmen ausgeben

<?php
// Blockgrößen gängiger Hash-Algorithmen ermitteln
$algorithmen = [
    'MD5'    => MHASH_MD5,
    'SHA1'   => MHASH_SHA1,
    'SHA256' => MHASH_SHA256,
    'SHA512' => MHASH_SHA512,
];

foreach ($algorithmen as $name => $konstante) {
    $blockgroesse = mhash_get_block_size($konstante);
    if ($blockgroesse !== false) {
        echo $name . ': ' . $blockgroesse . ' Bytes' . PHP_EOL;
    } else {
        echo $name . ': unbekannter Algorithmus' . PHP_EOL;
    }
}
MD5: 16 Bytes SHA1: 20 Bytes SHA256: 32 Bytes SHA512: 64 Bytes

Blockgröße zur Puffer-Dimensionierung nutzen

<?php
// Puffer passend zur SHA256-Blockgröße anlegen
$algo = MHASH_SHA256;
$blockgroesse = mhash_get_block_size($algo);

if ($blockgroesse === false) {
    throw new RuntimeException('Unbekannter Hash-Algorithmus.');
}

// Hash berechnen und Länge prüfen
$hashWert = mhash($algo, 'Hallo Welt');
$laenge   = strlen($hashWert);

echo 'Erwartete Blockgröße: ' . $blockgroesse . ' Bytes' . PHP_EOL;
echo 'Tatsächliche Hash-Länge: ' . $laenge . ' Bytes' . PHP_EOL;
echo 'Übereinstimmung: ' . ($laenge === $blockgroesse ? 'Ja' : 'Nein') . PHP_EOL;
Erwartete Blockgröße: 32 Bytes Tatsächliche Hash-Länge: 32 Bytes Übereinstimmung: Ja

// Wichtig · Fallstricke

Deprecation-Hinweis: Die mhash-Erweiterung gilt als veraltet. Ab PHP 5.3.0 ist sie als Wrapper um die hash-Erweiterung implementiert. Für neuen Code sollten ausschließlich die Funktionen der modernen hash-Erweiterung (hash(), hash_hmac(), hash_algos()) verwendet werden.

Die Funktion gibt die Ausgabelänge des Hash-Wertes in Bytes zurück – nicht die interne Blockgröße des Kompressionsvorgangs, wie sie z. B. für HMAC-Berechnungen nach RFC 2104 relevant wäre. Bei HMAC wird die interne Blockgröße (z. B. 64 Bytes bei SHA-256) benötigt, nicht die Ausgabelänge.