Start · Sprachen · PHP · Referenz · rnp_decrypt

rnp_decrypt

Funktion

Entschlüsselt eine PGP-verschlüsselte Nachricht mithilfe der RNP-Bibliothek und gibt den Klartext zurück.

Kategorie: crypto

Signatur

rnp_decrypt(RnpFFI $ffi, string $input, string $password): string|false

Beschreibung

rnp_decrypt gehört zur PHP-Erweiterung rnp, die auf der RNP-Bibliothek (eine moderne OpenPGP-Implementierung von Ribose) basiert. Die Funktion nimmt eine PGP-verschlüsselte Nachricht als Zeichenkette entgegen und entschlüsselt sie unter Verwendung des angegebenen Passworts (symmetrische Entschlüsselung) oder des im RnpFFI-Kontext geladenen privaten Schlüsselrings (asymmetrische Entschlüsselung).

Typische Einsatzgebiete sind das Entschlüsseln von verschlüsselten E-Mails, Dateien oder Nachrichten, die im PGP/OpenPGP-Format vorliegen. Die Funktion erwartet einen initialisierten RnpFFI-Kontext, in dem ggf. Schlüssel geladen und entsperrte private Schlüssel verfügbar sind.

Ist die Entschlüsselung erfolgreich, wird der entschlüsselte Klartext als PHP-string zurückgegeben. Schlägt sie fehl – etwa weil der falsche Schlüssel oder das falsche Passwort verwendet wird –, gibt die Funktion false zurück. Es empfiehlt sich, den Rückgabewert stets mit === false zu prüfen.

Für eine vollständige asymmetrische Entschlüsselung müssen vor dem Aufruf private Schlüssel in den RnpFFI-Kontext geladen und entsperrt werden (z. B. via rnp_load_keys und rnp_key_unlock). Das Passwort-Argument wird bei asymmetrischer Entschlüsselung für das Entsperren des privaten Schlüssels genutzt oder kann leer übergeben werden, wenn der Schlüssel bereits entsperrt ist.

Parameter

Name Typ Default Beschreibung
$ffi Pflicht RnpFFI Ein initialisierter RnpFFI-Kontext, der alle nötigen Schlüssel enthält. Erstellt z. B. mit rnp_ffi_create().
$input Pflicht string Die PGP-verschlüsselte Nachricht als Zeichenkette – entweder im binären Paketformat oder als ASCII-Armor-kodierter Text (beginnt mit -----BEGIN PGP MESSAGE-----).
$password Pflicht string Das Passwort zur symmetrischen Entschlüsselung oder zum Entsperren des privaten Schlüssels. Bei bereits entsperrten Schlüsseln kann ein leerer String übergeben werden.

Rückgabewert

Typ
string|false
Beschreibung
Gibt den entschlüsselten Klartext als string zurück. Bei einem Fehler (falsches Passwort, fehlender Schlüssel, ungültige Eingabe) wird false zurückgegeben.

Beispiele

Symmetrische Entschlüsselung mit Passwort

<?php
// FFI-Kontext initialisieren
$ffi = rnp_ffi_create('GPG', 'GPG');

// Symmetrisch verschlüsselte PGP-Nachricht (ASCII-Armor)
$encryptedMessage = file_get_contents('geheime_nachricht.asc');

$password = 'geheimesPasswort123';
$plaintext = rnp_decrypt($ffi, $encryptedMessage, $password);

if ($plaintext === false) {
    echo "Entschlüsselung fehlgeschlagen. Falsches Passwort?\n";
} else {
    echo "Klartext: " . $plaintext . "\n";
}

rnp_ffi_destroy($ffi);
Klartext: Dies ist die geheime Nachricht.

Asymmetrische Entschlüsselung mit privatem Schlüssel

<?php
// FFI-Kontext erstellen
$ffi = rnp_ffi_create('GPG', 'GPG');

// Privaten Schlüsselring laden
$secretKeyring = file_get_contents('/pfad/zum/secring.gpg');
rnp_load_keys($ffi, 'GPG', $secretKeyring, RNP_LOAD_SAVE_SECRET_KEYS);

// Verschlüsselte Nachricht lesen
$encryptedMessage = file_get_contents('nachricht.pgp');

// Passwort zum Entsperren des privaten Schlüssels
$keyPassword = 'meinSchluesselPasswort';

$plaintext = rnp_decrypt($ffi, $encryptedMessage, $keyPassword);

if ($plaintext === false) {
    echo "Entschlüsselung fehlgeschlagen.\n";
} else {
    echo "Entschlüsselter Inhalt:\n" . $plaintext;
}

rnp_ffi_destroy($ffi);
Entschlüsselter Inhalt: Vertrauliche Informationen für den Empfänger.

// Wichtig · Fallstricke

Sicherheitshinweis: Passwörter sollten niemals im Quellcode hartcodiert werden. Nutze sichere Eingabemethoden oder Umgebungsvariablen, um Passwörter zur Laufzeit bereitzustellen.

Stelle sicher, dass der RnpFFI-Kontext nach der Verwendung mit rnp_ffi_destroy() freigegeben wird, um Speicherlecks zu vermeiden.

Die rnp-PHP-Erweiterung ist eine PECL-Erweiterung und muss separat installiert werden. Sie setzt die systemeigene librnp-Bibliothek voraus. Die Dokumentation und API können je nach Version der Erweiterung variieren – prüfe stets die installierte Version.

Für sicherheitskritische Anwendungen sollte die Integrität (Signaturprüfung) der entschlüsselten Nachricht separat mittels rnp_op_verify sichergestellt werden, da rnp_decrypt ausschließlich entschlüsselt.