Signatur
Beschreibung
gnupg_decrypt() entschlüsselt einen PGP/GPG-verschlüsselten String und gibt den Klartext zurück. Bevor diese Funktion aufgerufen wird, muss mit gnupg_adddecryptkey() mindestens ein privater Schlüssel (ggf. mit Passphrase) zur GnuPG-Ressource hinzugefügt worden sein.
Die Funktion arbeitet mit der GnuPG-PECL-Extension (pecl/gnupg) und setzt eine korrekt konfigurierte GPG-Umgebung voraus, d. h. ein gültiges Schlüsselbund-Verzeichnis mit dem privaten Schlüssel, dessen Fingerabdruck beim Hinzufügen angegeben wurde.
Typische Einsatzbereiche sind das Entschlüsseln sicher übertragener Nachrichten oder Dateien, z. B. verschlüsselte E-Mails, API-Antworten oder Konfigurationsdaten, die nur autorisierte Stellen lesen dürfen.
Im Fehlerfall – etwa wenn kein passender Schlüssel gefunden wird oder der Chiffretext beschädigt ist – gibt die Funktion false zurück. Mit gnupg_geterror() lässt sich dann die genaue Fehlerursache abfragen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $identifier Pflicht | resource | Eine GnuPG-Ressource, die zuvor mit gnupg_init() erstellt wurde. |
|
| $text Pflicht | string | Der zu entschlüsselnde PGP-verschlüsselte Text (ASCII-Armor-Format oder binär). |
Rückgabewert
string zurück, oder false im Fehlerfall (z. B. kein passender Schlüssel, ungültiger Chiffretext).Beispiele
Einfaches Entschlüsseln einer verschlüsselten Nachricht
<?php
// GnuPG-Ressource initialisieren
$gpg = gnupg_init();
// Privaten Schlüssel mit Fingerabdruck und Passphrase hinzufügen
$fingerprint = 'ABCDEF1234567890ABCDEF1234567890ABCDEF12';
$passphrase = 'meine_geheime_passphrase';
gnupg_adddecryptkey($gpg, $fingerprint, $passphrase);
// Verschlüsselter Text (ASCII-Armor)
$encrypted = '-----BEGIN PGP MESSAGE-----
...
-----END PGP MESSAGE-----';
$plaintext = gnupg_decrypt($gpg, $encrypted);
if ($plaintext === false) {
echo 'Fehler beim Entschlüsseln: ' . gnupg_geterror($gpg);
} else {
echo 'Entschlüsselter Text: ' . $plaintext;
}
Entschlüsseln mit OO-Schnittstelle (gnupg-Klasse)
<?php
// OO-Schnittstelle der GnuPG-Extension verwenden
$gpg = new gnupg();
$fingerprint = 'ABCDEF1234567890ABCDEF1234567890ABCDEF12';
$gpg->adddecryptkey($fingerprint, 'meine_geheime_passphrase');
$encrypted = file_get_contents('/var/secure/message.gpg');
$plaintext = $gpg->decrypt($encrypted);
if ($plaintext === false) {
throw new RuntimeException('Entschlüsselung fehlgeschlagen: ' . $gpg->geterror());
}
echo 'Inhalt: ' . $plaintext;
// Wichtig · Fallstricke
Sicherheitshinweise:
- Speichere Passphrasen niemals im Klartext im Quellcode. Nutze Umgebungsvariablen oder einen Secret-Manager.
- Der private Schlüssel muss im GPG-Schlüsselbund des Systembenutzers vorhanden sein, unter dem PHP ausgeführt wird (z. B.
www-data). Passe ggf. dasGNUPGHOME-Verzeichnis perputenv('GNUPGHOME=/pfad/zum/keyring')an. - Stelle sicher, dass die GPG-Umgebung korrekte Dateiberechtigungen besitzt (Verzeichnis nur für den PHP-Benutzer lesbar), um unbefugten Zugriff auf private Schlüssel zu verhindern.
gnupg_decrypt()prüft nicht die Signatur des Textes. Für signierte und verschlüsselte Nachrichten sollte zusätzlichgnupg_decryptverify()verwendet werden.