Signatur
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
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;
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;
// 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_encryptverschlüsselt, signiert aber nicht. Für eine authentifizierte Verschlüsselung verwenden Siegnupg_encryptsign.- Die PECL-Erweiterung
gnupgmuss 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.