Start · Sprachen · PHP · Referenz · rnp_dump_packets_to_json

rnp_dump_packets_to_json

Funktion

Liest einen OpenPGP-Paketstrom und gibt dessen Strukturinformationen als JSON-String zurück.

seit PHP 8.0.0 Kategorie: crypto

Signatur

rnp_dump_packets_to_json(string $input, int $flags = 0): string|false

Beschreibung

rnp_dump_packets_to_json() analysiert einen rohen OpenPGP-Paketstrom (binär oder ASCII-armored) und liefert eine maschinenlesbare JSON-Darstellung aller enthaltenen Pakete zurück. Die Funktion gehört zur RNP-Erweiterung (librnp-Bindings) und setzt eine installierte ext-rnp-Erweiterung voraus.

Das Ergebnis eignet sich hervorragend für Diagnose- und Debugging-Zwecke: Man kann damit den genauen Aufbau eines PGP-Schlüssels, einer signierten Nachricht oder eines verschlüsselten Datenpakets inspizieren, ohne einen vollständigen Schlüsselspeicher aufzubauen. Gerade beim Troubleshooting von PGP-Interoperabilitätsproblemen ist diese Funktion wertvoll.

Über den Parameter flags lässt sich steuern, ob z. B. rohe Bytefolgen, MPI-Werte kryptografischer Parameter oder der Inhalt von Secret-Key-Paketen in die Ausgabe einbezogen werden sollen. Die verfügbaren Flag-Konstanten beginnen mit RNP_JSON_DUMP_*.

  • RNP_JSON_DUMP_MPI – gibt die MPI-Werte der Schlüsselparameter aus
  • RNP_JSON_DUMP_RAW – gibt rohe Byte-Repräsentationen aus
  • RNP_JSON_DUMP_GRIP – gibt Key-Grips aus

Parameter

Name Typ Default Beschreibung
$input Pflicht string Der rohe OpenPGP-Paketstrom als binärer String oder als ASCII-armored-Text (z. B. Inhalt einer .asc- oder .pgp-Datei).
$flags int 0 Bitmaske aus RNP_JSON_DUMP_*-Konstanten, die steuert, welche zusätzlichen Details (MPI-Werte, Rohdaten, Key-Grips) in die JSON-Ausgabe einbezogen werden. Standard ist 0 (keine Zusatzdetails).

Rückgabewert

Typ
string|false
Beschreibung
Gibt bei Erfolg einen JSON-String zurück, der die Struktur aller im Paketstrom enthaltenen OpenPGP-Pakete beschreibt. Im Fehlerfall (z. B. ungültiger Paketstrom oder Fehler in der Bibliothek) wird false zurückgegeben.

Beispiele

Öffentlichen Schlüssel analysieren und ausgeben

<?php
// Öffentlichen Schlüssel aus einer Datei laden
$pgpData = file_get_contents('/path/to/publickey.asc');

$json = rnp_dump_packets_to_json($pgpData);

if ($json === false) {
    echo 'Fehler beim Verarbeiten des PGP-Paketstroms.' . PHP_EOL;
} else {
    $packets = json_decode($json, true);
    foreach ($packets as $packet) {
        echo 'Pakettyp: ' . ($packet['header']['type'] ?? 'unbekannt') . PHP_EOL;
    }
}
Pakettyp: Public Key Pakettyp: User ID Pakettyp: Signature

Pakete mit MPI-Werten und Key-Grips dumpen

<?php
// Erweiterte Ausgabe mit MPI-Werten und Key-Grips
$pgpData = file_get_contents('/path/to/publickey.asc');

$flags = RNP_JSON_DUMP_MPI | RNP_JSON_DUMP_GRIP;
$json = rnp_dump_packets_to_json($pgpData, $flags);

if ($json !== false) {
    // Schön formatierte Ausgabe zur Inspektion
    $decoded = json_decode($json, true);
    echo json_encode($decoded, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
} else {
    echo 'Analyse fehlgeschlagen.' . PHP_EOL;
}

// Wichtig · Fallstricke

Sicherheitshinweis: Werden Secret-Key-Pakete übergeben und entsprechende Dump-Flags gesetzt, können sensible kryptografische Materialien (private Schlüsselparameter) im JSON-String erscheinen. Das Ergebnis sollte niemals ungeprüft an Endnutzer ausgegeben oder in Logs geschrieben werden.

Die Funktion setzt die PHP-Erweiterung ext-rnp voraus, die auf librnp basiert. Sie ist nicht Teil der PHP-Standarddistribution und muss separat installiert werden. Prüfe die Verfügbarkeit mit extension_loaded('rnp').

Bei sehr großen PGP-Paketströmen (z. B. Keyring-Dateien mit vielen Schlüsseln) kann die JSON-Ausgabe entsprechend umfangreich sein – plane den Speicherverbrauch ein.