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