Signatur
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
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);
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);
// 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.