Start · Sprachen · PHP · Referenz · rnp_import_keys

rnp_import_keys

Funktion

Importiert OpenPGP-Schlüssel aus einem PHP-String in den angegebenen RNP-Schlüsselbund und gibt eine JSON-Beschreibung der importierten Schlüssel zurück.

Kategorie: crypto

Signatur

rnp_import_keys(RnpFFI $ffi, string $input, int $flags): string|false

Beschreibung

rnp_import_keys liest OpenPGP-Schlüsseldaten (öffentliche und/oder private Schlüssel) aus einem binären oder ASCII-armoredString und fügt sie in den Schlüsselbund des übergebenen RnpFFI-Objekts ein. Die Funktion gehört zur PHP-RNP-Erweiterung, die auf der librnp-Bibliothek basiert und OpenPGP-Operationen (Signieren, Verifizieren, Verschlüsseln, Entschlüsseln) ermöglicht.

Als Rückgabewert liefert die Funktion einen JSON-String, der Details zu den importierten Schlüsseln enthält – darunter Fingerabdrücke, Key-IDs und den Status jedes einzelnen Schlüssels (neu hinzugefügt, aktualisiert, unverändert etc.). Dieses JSON eignet sich gut zur weiteren Verarbeitung, z. B. zur Protokollierung oder Validierung des Imports.

Über den Parameter flags lässt sich steuern, welche Schlüsseltypen importiert werden sollen. Typische Konstanten sind RNP_LOAD_SAVE_PUBLIC_KEYS und RNP_LOAD_SAVE_SECRET_KEYS, die auch kombiniert (via bitweisem OR) übergeben werden können.

Die Funktion ist besonders nützlich, wenn Schlüssel aus externen Quellen (z. B. Keyserver-Antworten, Dateien oder Benutzereingaben) in eine bestehende RNP-Schlüsselverwaltung integriert werden sollen, ohne dabei auf Dateisystem-Operationen angewiesen zu sein.

Parameter

Name Typ Default Beschreibung
$ffi Pflicht RnpFFI Ein gültiges RnpFFI-Objekt, das den Ziel-Schlüsselbund repräsentiert, in den die Schlüssel importiert werden.
$input Pflicht string Die zu importierenden Schlüsseldaten als PHP-String. Kann binäres OpenPGP-Format oder ASCII-Armored-Format (Base64-kodiert mit -----BEGIN PGP PUBLIC KEY BLOCK------Header) enthalten.
$flags Pflicht int Bitmaske, die steuert, welche Schlüsseltypen importiert werden. Verwende RNP_LOAD_SAVE_PUBLIC_KEYS, RNP_LOAD_SAVE_SECRET_KEYS oder deren bitweises OR für beide Typen.

Rückgabewert

Typ
string|false
Beschreibung
Bei Erfolg einen JSON-String mit Details zu den importierten Schlüsseln (Fingerabdrücke, Key-IDs, Importstatus). Gibt false zurück, wenn ein Fehler aufgetreten ist, z. B. wenn die Eingabedaten ungültig sind oder der Import fehlschlägt.

Beispiele

Öffentlichen Schlüssel aus ASCII-Armored-String importieren

<?php
// RNP FFI-Objekt initialisieren (OpenPGP-Profil)
$ffi = rnp_ffi_create('GPG', 'GPG');
if ($ffi === false) {
    die('Fehler: RNP FFI konnte nicht erstellt werden.');
}

// Beispiel: ASCII-Armored Public Key als String
$pubkeyArmored = file_get_contents('/pfad/zur/pubkey.asc');
if ($pubkeyArmored === false) {
    die('Fehler: Schlüsseldatei konnte nicht gelesen werden.');
}

// Öffentlichen Schlüssel importieren
$result = rnp_import_keys($ffi, $pubkeyArmored, RNP_LOAD_SAVE_PUBLIC_KEYS);

if ($result === false) {
    echo 'Import fehlgeschlagen.' . PHP_EOL;
} else {
    $info = json_decode($result, true);
    echo 'Anzahl importierter Schlüssel: ' . count($info['keys']) . PHP_EOL;
    foreach ($info['keys'] as $key) {
        echo 'Fingerabdruck: ' . $key['fingerprint'] . ', Status: ' . $key['public'] . PHP_EOL;
    }
}

rnp_ffi_destroy($ffi);
Anzahl importierter Schlüssel: 1 Fingerabdruck: ABCDEF1234567890ABCDEF1234567890ABCDEF12, Status: new

Öffentliche und private Schlüssel gemeinsam importieren

<?php
$ffi = rnp_ffi_create('GPG', 'GPG');
if ($ffi === false) {
    die('RNP FFI konnte nicht erstellt werden.');
}

// Schlüsselpaar-Daten aus einer Quelle laden (z. B. exportiertes Schlüsselbund-Backup)
$keyData = file_get_contents('/pfad/zum/keypair.pgp');

// Beide Schlüsseltypen importieren
$flags = RNP_LOAD_SAVE_PUBLIC_KEYS | RNP_LOAD_SAVE_SECRET_KEYS;
$result = rnp_import_keys($ffi, $keyData, $flags);

if ($result !== false) {
    $info = json_decode($result, true);
    echo 'Import-Ergebnis als JSON:' . PHP_EOL;
    foreach ($info['keys'] as $key) {
        echo sprintf(
            "  Key-ID: %s | Öffentlich: %s | Privat: %s\n",
            $key['keyid'],
            $key['public'] ?? 'n/a',
            $key['secret'] ?? 'n/a'
        );
    }
} else {
    echo 'Fehler beim Importieren der Schlüssel.' . PHP_EOL;
}

rnp_ffi_destroy($ffi);
Import-Ergebnis als JSON: Key-ID: 1234567890ABCDEF | Öffentlich: new | Privat: new

// Wichtig · Fallstricke

Sicherheitshinweis: Seien Sie vorsichtig beim Import von Schlüsseln aus nicht vertrauenswürdigen Quellen. Importierte Schlüssel sollten vor der Verwendung (z. B. für die Verschlüsselung oder Signaturprüfung) verifiziert werden, da ein Angreifer gefälschte Schlüssel einschleusen könnte.

Schlüsseltypen: Wenn Sie nur RNP_LOAD_SAVE_PUBLIC_KEYS übergeben, werden im Input enthaltene private Schlüssel stillschweigend ignoriert – und umgekehrt. Stellen Sie sicher, dass die Flags der Erwartung an den Eingabe-String entsprechen.

JSON-Struktur: Das zurückgegebene JSON enthält ein Array keys mit Einträgen, die u. a. fingerprint, keyid, public und secret enthalten. Der Status-Wert kann new, updated oder unchanged sein.

Ressourcen: Das RnpFFI-Objekt sollte nach der Verwendung immer mit rnp_ffi_destroy() freigegeben werden, um Speicherlecks zu vermeiden.