Start · Sprachen · PHP · Referenz · gnupg_encrypt

gnupg_encrypt

Funktion

Verschlüsselt einen Klartextstring mit dem zuvor konfigurierten GnuPG-Schlüssel und gibt den verschlüsselten Text zurück.

seit PHP 1.3.0 Kategorie: crypto

Signatur

gnupg_encrypt(resource $identifier, string $plaintext): string|false

Beschreibung

gnupg_encrypt verschlüsselt den übergebenen Klartextstring $plaintext mit dem oder den öffentlichen Schlüsseln, die zuvor über gnupg_addencryptkey zur GnuPG-Ressource hinzugefügt wurden. Das Ergebnis ist ein OpenPGP-konformes Chiffrat, das nur von den Inhabern der entsprechenden privaten Schlüssel entschlüsselt werden kann.

Die Funktion eignet sich besonders für die sichere Übertragung sensibler Daten (z. B. Passwörter, persönliche Informationen oder Dokumente) zwischen Systemen, bei denen der Empfänger seinen öffentlichen Schlüssel bereitgestellt hat. Das Chiffrat kann als ASCII-Armor (Standard) oder als Binärdaten ausgegeben werden – dies wird über gnupg_setarmor gesteuert.

Soll die Nachricht gleichzeitig signiert werden, sollte stattdessen gnupg_encryptsign verwendet werden, das Verschlüsselung und digitale Signatur in einem Schritt kombiniert.

Wichtig: Die GnuPG-Ressource muss zuvor mit gnupg_init erzeugt und mindestens ein Verschlüsselungsschlüssel mit gnupg_addencryptkey hinzugefügt worden sein, bevor gnupg_encrypt aufgerufen wird.

Parameter

Name Typ Default Beschreibung
$identifier Pflicht resource Eine GnuPG-Ressource, wie sie von gnupg_init() zurückgegeben wird. Sie enthält die Konfiguration (Schlüsselbund, Einstellungen) für die aktuelle Operation.
$plaintext Pflicht string Der zu verschlüsselnde Klartextstring. Kann beliebige Textdaten oder Binärdaten enthalten.

Rückgabewert

Typ
string|false
Beschreibung
Gibt den verschlüsselten Text als String zurück (standardmäßig ASCII-Armor-kodiert). Im Fehlerfall – etwa wenn kein Verschlüsselungsschlüssel gesetzt wurde oder die Verschlüsselung fehlschlägt – wird false zurückgegeben. Die genaue Fehlermeldung kann mit gnupg_geterror abgerufen werden.

Beispiele

Einfache Verschlüsselung eines Textes mit einem öffentlichen Schlüssel

<?php
// GnuPG-Ressource initialisieren
$gpg = gnupg_init();

// Fingerprint des gewünschten öffentlichen Schlüssels
$fingerprint = 'ABCD1234ABCD1234ABCD1234ABCD1234ABCD1234';

// Verschlüsselungsschlüssel hinzufügen
if (!gnupg_addencryptkey($gpg, $fingerprint)) {
    die('Schlüssel konnte nicht hinzugefügt werden: ' . gnupg_geterror($gpg));
}

$plaintext = 'Dies ist eine geheime Nachricht!';

// Text verschlüsseln
$encrypted = gnupg_encrypt($gpg, $plaintext);

if ($encrypted === false) {
    die('Verschlüsselung fehlgeschlagen: ' . gnupg_geterror($gpg));
}

echo $encrypted;
-----BEGIN PGP MESSAGE----- ... -----END PGP MESSAGE-----

Verschlüsselung für mehrere Empfänger

<?php
$gpg = gnupg_init();

// ASCII-Armor aktivieren (Standard, zur Klarheit explizit gesetzt)
gnupg_setarmor($gpg, 1);

// Mehrere Empfänger-Schlüssel hinzufügen
$recipients = [
    'FINGERPRINT_EMPFAENGER_1_AAAA1111AAAA1111AAAA1111',
    'FINGERPRINT_EMPFAENGER_2_BBBB2222BBBB2222BBBB2222',
];

foreach ($recipients as $fp) {
    if (!gnupg_addencryptkey($gpg, $fp)) {
        die('Schlüssel konnte nicht hinzugefügt werden: ' . gnupg_geterror($gpg));
    }
}

$plaintext = 'Vertrauliche Informationen für mehrere Empfänger.';
$encrypted = gnupg_encrypt($gpg, $plaintext);

if ($encrypted === false) {
    die('Verschlüsselung fehlgeschlagen: ' . gnupg_geterror($gpg));
}

// Verschlüsselten Text z. B. in Datei schreiben
file_put_contents('/tmp/nachricht.gpg', $encrypted);
echo 'Verschlüsselung erfolgreich. Datei gespeichert.' . PHP_EOL;
Verschlüsselung erfolgreich. Datei gespeichert.

// Wichtig · Fallstricke

Sicherheitshinweise:

  • Stellen Sie sicher, dass die verwendeten öffentlichen Schlüssel aus einer vertrauenswürdigen Quelle stammen und im GnuPG-Schlüsselbund als vertrauenswürdig markiert sind. Ein nicht vertrauenswürdiger Schlüssel kann die Verschlüsselung trotzdem durchführen, bietet jedoch keine Garantie der Empfängeridentität.
  • Die verschlüsselten Daten sind nur so sicher wie die private Schlüssel der Empfänger. Achten Sie darauf, private Schlüssel niemals in unsicheren Umgebungen zu speichern.
  • gnupg_encrypt verschlüsselt, signiert aber nicht. Für eine authentifizierte Verschlüsselung verwenden Sie gnupg_encryptsign.
  • Die PECL-Erweiterung gnupg muss installiert sein (pecl install gnupg). Seit PHP 8.x wurde die objektorientierte API bevorzugt – prüfen Sie, ob Ihre PHP-Version die prozedurale API noch unterstützt.
  • Binäre Ausgabe (ohne ASCII-Armor) kann mit gnupg_setarmor($gpg, 0) aktiviert werden, ist aber für textbasierte Übertragungen weniger geeignet.