Start · Sprachen · PHP · Referenz · mcrypt_module_get_supported_key_sizes

mcrypt_module_get_supported_key_sizes

Funktion

Gibt ein Array mit den vom geöffneten Mcrypt-Modul unterstützten Schlüsselgrößen (in Bytes) zurück.

seit PHP 4.0.2 Kategorie: crypto

Signatur

mcrypt_module_get_supported_key_sizes(resource $td): array

Beschreibung

mcrypt_module_get_supported_key_sizes() ermittelt, welche Schlüssellängen (in Bytes) ein bestimmter Verschlüsselungsalgorithmus unterstützt. Das Ergebnis ist ein Array mit Integer-Werten, die jeweils eine gültige Schlüssellänge in Bytes repräsentieren.

Die Funktion ist nützlich, wenn man zur Laufzeit feststellen möchte, welche Schlüsselgrößen ein Algorithmus akzeptiert, bevor man z. B. einen Schlüssel generiert oder validiert. So kann man sicherstellen, dass der eingesetzte Schlüssel kompatibel ist und keine Fehler bei der Verschlüsselung auftreten.

Gibt die Funktion ein leeres Array zurück, bedeutet dies, dass der Algorithmus jede Schlüssellänge bis zur maximalen Größe unterstützt (die über mcrypt_enc_get_key_size() abgefragt werden kann).

Achtung: Die gesamte mcrypt-Erweiterung gilt seit PHP 7.1 als veraltet (deprecated) und wurde in PHP 7.2 entfernt. Für neuen Code sollte stattdessen openssl_*-Funktionen oder die sodium_*-Funktionen (libsodium) verwendet werden.

Parameter

Name Typ Default Beschreibung
$td Pflicht resource Ein Mcrypt-Modul-Ressource, wie sie von mcrypt_module_open() zurückgegeben wird. Beschreibt den Algorithmus, dessen unterstützte Schlüsselgrößen abgefragt werden sollen.

Rückgabewert

Typ
array
Beschreibung
Gibt ein Array mit Integer-Werten zurück, die die unterstützten Schlüsselgrößen in Bytes darstellen. Ist das Array leer, akzeptiert der Algorithmus jede Schlüssellänge von 1 Byte bis zur maximalen Schlüssellänge (ermittelbar über mcrypt_enc_get_key_size()).

Beispiele

Unterstützte Schlüsselgrößen von AES (Rijndael-128) abfragen

<?php
// Modul für AES (Rijndael-128) im CBC-Modus öffnen
$td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');

if ($td === false) {
    die('Algorithmus konnte nicht geöffnet werden.');
}

$keySizes = mcrypt_module_get_supported_key_sizes($td);

if (empty($keySizes)) {
    $maxSize = mcrypt_enc_get_key_size($td);
    echo "Der Algorithmus unterstützt alle Schlüsselgrößen von 1 bis {$maxSize} Bytes." . PHP_EOL;
} else {
    echo 'Unterstützte Schlüsselgrößen (in Bytes): ' . implode(', ', $keySizes) . PHP_EOL;
}

mcrypt_module_close($td);
?>
Unterstützte Schlüsselgrößen (in Bytes): 16, 24, 32

Schlüssel vor der Verschlüsselung auf Kompatibilität prüfen

<?php
$algorithm  = MCRYPT_RIJNDAEL_128;
$mode       = MCRYPT_MODE_CBC;
$userKey    = 'MeinGeheimesPasswort1234'; // 24 Zeichen = 24 Bytes

$td = mcrypt_module_open($algorithm, '', $mode, '');

$supportedSizes = mcrypt_module_get_supported_key_sizes($td);
$keyLength      = strlen($userKey);

if (!empty($supportedSizes) && !in_array($keyLength, $supportedSizes, true)) {
    echo "Ungültige Schlüssellänge: {$keyLength} Bytes. Erlaubt: " . implode(', ', $supportedSizes) . ' Bytes.' . PHP_EOL;
} else {
    echo "Schlüssellänge {$keyLength} Bytes ist gültig." . PHP_EOL;
    // Hier würde die eigentliche Verschlüsselung folgen ...
}

mcrypt_module_close($td);
?>
Schlüssellänge 24 Bytes ist gültig.

// Wichtig · Fallstricke

Deprecation-Hinweis: Die mcrypt-Erweiterung wurde in PHP 7.1 als veraltet markiert und in PHP 7.2 vollständig entfernt. Code, der diese Funktion verwendet, ist auf modernen PHP-Versionen nicht lauffähig. Verwende stattdessen openssl_get_cipher_key_lengths() oder die sodium_crypto_*-Funktionen aus der libsodium-Erweiterung.

Ein leeres Rückgabe-Array bedeutet nicht, dass keine Schlüsselgrößen unterstützt werden, sondern dass alle Längen bis zum Maximum gültig sind. Diese Unterscheidung ist wichtig für die korrekte Validierungslogik.

Schlüssellängen werden immer in Bytes, nicht in Bits angegeben. AES-256 hat z. B. eine Schlüssellänge von 32 Bytes (256 Bit).