Start · Sprachen · PHP · Referenz · mcrypt_get_key_size

mcrypt_get_key_size

Funktion

Gibt die maximale Schlüsselgröße (in Bytes) für den angegebenen Verschlüsselungsalgorithmus zurück.

seit PHP 4.0.0 Kategorie: crypto

Signatur

mcrypt_get_key_size(int $cipher): int|false

Beschreibung

mcrypt_get_key_size() ermittelt die maximale Schlüsselgröße in Bytes, die der gewählte Verschlüsselungsalgorithmus unterstützt. Diese Information ist wichtig, um einen Schlüssel korrekter Länge zu erzeugen oder zu prüfen, bevor eine Verschlüsselung begonnen wird.

Die Funktion erwartet eine Algorithmus-Konstante (z. B. MCRYPT_AES, MCRYPT_DES, MCRYPT_BLOWFISH) und gibt die zugehörige maximale Schlüssellänge zurück. Wird ein ungültiger Algorithmus übergeben, liefert die Funktion false.

Achtung: Die gesamte mcrypt-Erweiterung wurde in PHP 7.1 als veraltet markiert und in PHP 7.2 vollständig entfernt. Für neue Projekte sollte stattdessen openssl_*-Funktionen oder die sodium_*-API (libsodium, ab PHP 7.2 integriert) verwendet werden.

Die Funktion ist vor allem dann nützlich, wenn man zur Laufzeit prüfen möchte, ob ein bereitgestellter Schlüssel die richtige Länge für einen bestimmten Algorithmus hat, bevor man mcrypt_encrypt() oder mcrypt_module_open() aufruft.

Parameter

Name Typ Default Beschreibung
$cipher Pflicht int Eine mcrypt-Algorithmus-Konstante, z. B. MCRYPT_AES, MCRYPT_DES oder MCRYPT_BLOWFISH. Diese Konstanten sind durch die mcrypt-Erweiterung definiert.

Rückgabewert

Typ
int|false
Beschreibung
Gibt die maximale Schlüssellänge in Bytes als int zurück, oder false, wenn der angegebene Algorithmus ungültig oder unbekannt ist.

Beispiele

Schlüsselgröße für AES und DES abfragen

<?php
// AES-Schlüsselgröße abfragen
$aesKeySize = mcrypt_get_key_size(MCRYPT_AES);
echo "AES maximale Schlüsselgröße: " . $aesKeySize . " Bytes\n";

// DES-Schlüsselgröße abfragen
$desKeySize = mcrypt_get_key_size(MCRYPT_DES);
echo "DES maximale Schlüsselgröße: " . $desKeySize . " Bytes\n";
AES maximale Schlüsselgröße: 32 Bytes DES maximale Schlüsselgröße: 8 Bytes

Schlüssel vor der Verschlüsselung validieren

<?php
function verschluesseln(string $klartext, string $schluessel, int $algorithmus): string|false
{
    $maxKeySize = mcrypt_get_key_size($algorithmus);

    if ($maxKeySize === false) {
        throw new InvalidArgumentException('Ungültiger Verschlüsselungsalgorithmus.');
    }

    if (strlen($schluessel) > $maxKeySize) {
        throw new InvalidArgumentException(
            "Schlüssel zu lang. Maximal {$maxKeySize} Bytes erlaubt, " .
            strlen($schluessel) . " Bytes erhalten."
        );
    }

    // Schlüssel auf die maximale Größe auffüllen
    $schluessel = str_pad($schluessel, $maxKeySize, "\0");

    $ivSize = mcrypt_get_iv_size($algorithmus, MCRYPT_MODE_CBC);
    $iv = mcrypt_create_iv($ivSize, MCRYPT_RAND);

    return base64_encode($iv . mcrypt_encrypt($algorithmus, $schluessel, $klartext, MCRYPT_MODE_CBC, $iv));
}

try {
    $ergebnis = verschluesseln('Geheimer Text', 'meinSchluessel', MCRYPT_AES);
    echo "Verschlüsselt: " . $ergebnis . "\n";
} catch (InvalidArgumentException $e) {
    echo "Fehler: " . $e->getMessage() . "\n";
}
Verschlüsselt: (base64-kodierter verschlüsselter Text)

// Wichtig · Fallstricke

Deprecation: mcrypt_get_key_size() ist seit PHP 7.1 veraltet (deprecated) und wurde in PHP 7.2 vollständig entfernt. Bestehender Code sollte auf openssl_cipher_key_length() oder die libsodium-Konstanten wie SODIUM_CRYPTO_SECRETBOX_KEYBYTES umgestellt werden.

Sicherheit: Die mcrypt-Bibliothek selbst gilt als unsicher und wird nicht mehr aktiv gepflegt. Sie unterstützt kein authentifiziertes Verschlüsseln (AEAD), was sie anfällig für Manipulationsangriffe macht. Für sichere Verschlüsselung empfiehlt sich sodium_crypto_secretbox() oder openssl_encrypt() mit GCM-Modus.

Es gibt zwei Varianten der Funktion: mcrypt_get_key_size(int $cipher) für Module-Konstanten und mcrypt_module_get_algo_key_size(string $algorithm) für Algorithmus-Namen als Zeichenkette.