Start · Sprachen · PHP · Referenz · gnupg_keyinfo

gnupg_keyinfo

Funktion

Gibt ein Array mit Informationen über alle GnuPG-Schlüssel zurück, die dem angegebenen Suchmuster entsprechen.

seit PHP 1.3.0 Kategorie: crypto

Signatur

gnupg_keyinfo(resource $identifier, string $pattern): array|false

Beschreibung

gnupg_keyinfo() durchsucht den GnuPG-Schlüsselbund nach Schlüsseln, die dem übergebenen $pattern entsprechen, und liefert detaillierte Informationen zu jedem gefundenen Schlüssel zurück. Das Muster wird gegen Name, E-Mail-Adresse, Kommentar und Fingerabdruck der Schlüssel geprüft.

Das Ergebnis ist ein mehrdimensionales Array. Jeder Eintrag beschreibt einen Schlüssel und enthält unter anderem dessen Fingerabdruck (fingerprint), ob er widerrufen (revoked) oder abgelaufen (expired) ist, sowie ein Unter-Array uids mit den zugehörigen User-IDs (Name, E-Mail, Kommentar) und ein Unter-Array subkeys mit den Unterschlüsseln.

Die Funktion eignet sich besonders, um vor dem Ver- oder Entschlüsseln zu prüfen, ob ein bestimmter Schlüssel im Schlüsselbund vorhanden ist, und um Schlüssel-Fingerabdrücke für nachfolgende Operationen wie gnupg_addencryptkey() oder gnupg_addsignkey() zu ermitteln.

Der $identifier wird zuvor mit gnupg_init() erzeugt. Die Funktion ist Teil der prozeduralen GnuPG-API; die objektorientierte Entsprechung ist gnupg::keyinfo().

Parameter

Name Typ Default Beschreibung
$identifier Pflicht resource GnuPG-Ressource, die zuvor mit gnupg_init() erzeugt wurde.
$pattern Pflicht string Suchmuster (Teilstring), das gegen Name, E-Mail-Adresse, Kommentar oder Fingerabdruck der Schlüssel geprüft wird. Ein leerer String gibt alle Schlüssel im Schlüsselbund zurück.

Rückgabewert

Typ
array|false
Beschreibung
Gibt ein (möglicherweise leeres) Array zurück, dessen Einträge jeweils einen gefundenen Schlüssel beschreiben. Jeder Eintrag enthält u. a. die Felder disabled, expired, revoked, is_secret, can_sign, can_encrypt, uids (Array der User-IDs) und subkeys (Array der Unterschlüssel). Bei einem Fehler wird false zurückgegeben.

Beispiele

Schlüsselinformationen für eine E-Mail-Adresse abrufen

<?php
$gpg = gnupg_init();

$keys = gnupg_keyinfo($gpg, 'alice@example.com');

if ($keys === false) {
    echo 'Fehler beim Abrufen der Schlüsselinformationen.';
} elseif (empty($keys)) {
    echo 'Kein passender Schlüssel gefunden.';
} else {
    foreach ($keys as $key) {
        echo 'Fingerabdruck: ' . $key['subkeys'][0]['fingerprint'] . PHP_EOL;
        echo 'Kann verschlüsseln: ' . ($key['can_encrypt'] ? 'ja' : 'nein') . PHP_EOL;
        echo 'Kann signieren: ' . ($key['can_sign'] ? 'ja' : 'nein') . PHP_EOL;
        echo 'Widerrufen: ' . ($key['revoked'] ? 'ja' : 'nein') . PHP_EOL;

        foreach ($key['uids'] as $uid) {
            echo 'UID: ' . $uid['name'] . ' <' . $uid['email'] . '>' . PHP_EOL;
        }
        echo '---' . PHP_EOL;
    }
}
Fingerabdruck: A1B2C3D4E5F6... Kann verschlüsseln: ja Kann signieren: ja Widerrufen: nein UID: Alice Müller <alice@example.com> ---

Fingerabdruck ermitteln und zum Verschlüsseln verwenden

<?php
$gpg = gnupg_init();

$keys = gnupg_keyinfo($gpg, 'bob@example.com');

if (!empty($keys)) {
    $fingerprint = $keys[0]['subkeys'][0]['fingerprint'];

    // Nur verwenden, wenn der Schlüssel gültig ist
    if (!$keys[0]['revoked'] && !$keys[0]['expired']) {
        gnupg_addencryptkey($gpg, $fingerprint);
        $verschluesselt = gnupg_encrypt($gpg, 'Geheime Nachricht');
        echo 'Nachricht verschlüsselt: ' . substr($verschluesselt, 0, 40) . '...';
    } else {
        echo 'Schlüssel ist ungültig (widerrufen oder abgelaufen).';
    }
} else {
    echo 'Kein Schlüssel für bob@example.com gefunden.';
}
Nachricht verschlüsselt: -----BEGIN PGP MESSAGE-----...

// Wichtig · Fallstricke

Schlüsselbund-Pfad: Standardmäßig verwendet GnuPG den Schlüsselbund des aktuellen Systembenutzers (meist des Webserver-Nutzers wie www-data). Der Pfad kann über die Umgebungsvariable GNUPGHOME oder gnupg_setarmor() beeinflusst werden.

Leeres Muster: Ein leerer String als $pattern gibt alle Schlüssel im Schlüsselbund zurück, was bei großen Schlüsselbünden zu hohem Speicherverbrauch führen kann.

Geheime Schlüssel: Das Feld is_secret zeigt an, ob auch der private Schlüssel vorhanden ist. Privater Schlüsselbesitz sollte niemals unnötig preisgegeben werden.