Start · Sprachen · PHP · Referenz · gnupg_addencryptkey

gnupg_addencryptkey

Funktion

Fügt dem GnuPG-Kontext einen öffentlichen Schlüssel hinzu, der für nachfolgende Verschlüsselungsoperationen verwendet wird.

seit PHP 1.3.0 Kategorie: crypto

Signatur

gnupg_addencryptkey(resource $identifier, string $fingerprint): bool

Beschreibung

gnupg_addencryptkey() registriert einen öffentlichen GnuPG-Schlüssel anhand seines Fingerabdrucks im angegebenen GnuPG-Kontext. Alle danach mit gnupg_encrypt() oder gnupg_encryptsign() ausgeführten Verschlüsselungsoperationen verwenden diesen Schlüssel (bzw. alle so hinzugefügten Schlüssel).

Es können mehrere Empfänger-Schlüssel zum selben Kontext hinzugefügt werden, indem gnupg_addencryptkey() mehrfach aufgerufen wird. Die Nachricht wird dann für jeden dieser Empfänger verschlüsselt – ein in der asymmetrischen Kryptografie übliches Vorgehen für Multi-Recipient-Szenarien.

Der Schlüssel muss im lokalen GnuPG-Schlüsselbund des Systembenutzers vorhanden sein, bevor er verwendet werden kann. Der Fingerabdruck dient als eindeutige Identifikation und sollte stets vollständig (40 Hex-Zeichen) angegeben werden, um Verwechslungen mit gleichnamigen Schlüsseln zu vermeiden.

Um den Kontext zurückzusetzen und alle hinzugefügten Verschlüsselungsschlüssel zu entfernen, kann gnupg_clearencryptkeys() aufgerufen werden.

Parameter

Name Typ Default Beschreibung
$identifier Pflicht resource Ein gültiger GnuPG-Kontext, der zuvor mit gnupg_init() erzeugt wurde.
$fingerprint Pflicht string Der vollständige Fingerabdruck (40-stelliger Hex-String) des öffentlichen Schlüssels, der für die Verschlüsselung verwendet werden soll. Der Schlüssel muss im lokalen GnuPG-Schlüsselbund vorhanden sein.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn der Schlüssel erfolgreich hinzugefügt wurde. Gibt false zurück, wenn der Schlüssel nicht im Schlüsselbund gefunden wurde oder ein anderer Fehler aufgetreten ist. Im Fehlerfall kann gnupg_geterror() für eine detailliertere Fehlermeldung verwendet werden.

Beispiele

Nachricht für einen einzelnen Empfänger verschlüsseln

<?php
// GnuPG-Kontext initialisieren
$gnupg = gnupg_init();

// Fingerabdruck des Empfänger-Schlüssels
$fingerprint = 'A1B2C3D4E5F6A1B2C3D4E5F6A1B2C3D4E5F6A1B2';

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

// Nachricht verschlüsseln
$plaintext = 'Das ist eine vertrauliche Nachricht.';
$encrypted = gnupg_encrypt($gnupg, $plaintext);

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

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

Nachricht für mehrere Empfänger verschlüsseln

<?php
// GnuPG-Kontext initialisieren
$gnupg = gnupg_init();

// Fingerabdrücke der Empfänger
$empfaenger = [
    'A1B2C3D4E5F6A1B2C3D4E5F6A1B2C3D4E5F6A1B2', // Alice
    'B2C3D4E5F6A1B2C3D4E5F6A1B2C3D4E5F6A1B2C3', // Bob
];

// Alle Empfänger-Schlüssel hinzufügen
foreach ($empfaenger as $fingerprint) {
    if (!gnupg_addencryptkey($gnupg, $fingerprint)) {
        die('Schlüssel konnte nicht hinzugefügt werden: ' . gnupg_geterror($gnupg));
    }
}

// Nachricht für alle Empfänger verschlüsseln
$plaintext = 'Diese Nachricht können Alice und Bob lesen.';
$encrypted = gnupg_encrypt($gnupg, $plaintext);

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

echo "Nachricht erfolgreich für " . count($empfaenger) . " Empfänger verschlüsselt.\n";
echo $encrypted;
Nachricht erfolgreich für 2 Empfänger verschlüsselt. -----BEGIN PGP MESSAGE----- ... -----END PGP MESSAGE-----

// Wichtig · Fallstricke

Sicherheitshinweis: Verwende stets den vollständigen 40-stelligen Fingerabdruck anstelle von Kurz-IDs oder E-Mail-Adressen, um Key-Confusion-Angriffe zu vermeiden. Angreifer könnten andernfalls einen gefälschten Schlüssel mit ähnlicher Kurzkennung in den Schlüsselbund einschleusen.

Der Schlüssel muss sich im lokalen Schlüsselbund des Systembenutzers befinden, unter dem der PHP-Prozess läuft (typischerweise www-data). Schlüssel können mit gpg --import importiert werden oder programmatisch über gnupg_import().

Die hinzugefügten Schlüssel bleiben für die Lebensdauer des Kontexts oder bis zum Aufruf von gnupg_clearencryptkeys() aktiv. Bei der Verarbeitung mehrerer Nachrichten für unterschiedliche Empfänger empfiehlt es sich daher, den Kontext nach jeder Verschlüsselung zurückzusetzen.