Signatur
Beschreibung
rnp_op_encrypt ist Teil der PHP-Bindings für die RNP OpenPGP-Bibliothek und ermöglicht es, Daten aus einem RnpInput-Objekt zu verschlüsseln und das Ergebnis in ein RnpOutput-Objekt zu schreiben. Die Verschlüsselung erfolgt nach dem OpenPGP-Standard (RFC 4880).
Die Funktion akzeptiert einen oder mehrere Empfänger-Schlüssel (als Array von RnpKey-Objekten), sodass die verschlüsselte Nachricht von mehreren Empfängern entschlüsselt werden kann. Optional können Passwortschutz, Komprimierung, Algorithmuswahl und weitere Parameter über das $options-Array gesteuert werden.
Typische Anwendungsfälle sind das Verschlüsseln von Dateien oder Nachrichten für bestimmte Empfänger, etwa in sicheren Kommunikationsanwendungen, Datei-Archivierungslösungen oder E-Mail-Verschlüsselung. Die Funktion ist sinnvoll, wenn eine standardkonforme, interoperable OpenPGP-Verschlüsselung benötigt wird.
Vor der Nutzung muss ein RnpFFI-Kontext erstellt und die benötigten öffentlichen Schlüssel der Empfänger geladen werden. Input und Output werden über dedizierte RnpInput- bzw. RnpOutput-Objekte übergeben.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $ffi Pflicht | RnpFFI | Ein initialisierter RNP-FFI-Kontext, erstellt z. B. mit rnp_ffi_create(). Enthält den Schlüsselring und die Konfiguration der Bibliothek. |
|
| $input Pflicht | RnpInput | Ein RnpInput-Objekt, das die zu verschlüsselnden Quelldaten enthält. Kann aus einer Datei, einem String oder einem Stream erstellt worden sein. |
|
| $output Pflicht | RnpOutput | Ein RnpOutput-Objekt, in das die verschlüsselten Daten geschrieben werden. Kann auf eine Datei, einen String-Puffer oder einen Stream verweisen. |
|
| $keys Pflicht | array | Array von RnpKey-Objekten, die die öffentlichen Schlüssel der Empfänger repräsentieren. Mindestens ein Schlüssel muss angegeben werden. |
|
| $options | array | [] | Optionales assoziatives Array zur Steuerung von Verschlüsselungsparametern. Mögliche Schlüssel sind z. B. cipher (Algorithmus, z. B. 'AES256'), compression_alg, compression_level, armor (ASCII-Armor, bool), aead (AEAD-Modus) sowie Passwort-Optionen. |
Rückgabewert
true bei erfolgreicher Verschlüsselung zurück, false bei einem Fehler (z. B. ungültiger Schlüssel, nicht initialisierter Kontext oder fehlgeschlagene Ausgabe).Beispiele
Einfache Verschlüsselung einer Nachricht für einen Empfänger
<?php
// RNP-Kontext erstellen
$ffi = rnp_ffi_create('GPG', 'GPG');
// Öffentlichen Schlüssel des Empfängers laden
rnp_load_keys($ffi, 'GPG', file_get_contents('/pfad/zum/pubkey.gpg'), RNP_LOAD_SAVE_PUBLIC_KEYS);
// Schlüssel des Empfängers suchen
$key = rnp_locate_key($ffi, 'userid', 'empfaenger@beispiel.de');
// Eingabe und Ausgabe vorbereiten
$input = rnp_input_from_memory('Geheime Nachricht');
$output = rnp_output_to_memory();
// Verschlüsseln
$result = rnp_op_encrypt($ffi, $input, $output, [$key], [
'cipher' => 'AES256',
'armor' => true,
'compression_alg' => 'ZIP',
'compression_level' => 6,
]);
if ($result) {
$encrypted = rnp_output_memory_get_buf($output);
echo "Verschlüsselte Nachricht (ASCII-Armor):\n";
echo $encrypted;
} else {
echo "Fehler bei der Verschlüsselung.";
}
rnp_input_destroy($input);
rnp_output_destroy($output);
rnp_ffi_destroy($ffi);
Verschlüsselung für mehrere Empfänger mit Datei-Ausgabe
<?php
$ffi = rnp_ffi_create('GPG', 'GPG');
// Schlüsselring mit mehreren öffentlichen Schlüsseln laden
rnp_load_keys($ffi, 'GPG', file_get_contents('/pfad/zum/pubkeyring.gpg'), RNP_LOAD_SAVE_PUBLIC_KEYS);
// Mehrere Empfänger-Schlüssel ermitteln
$key1 = rnp_locate_key($ffi, 'userid', 'alice@beispiel.de');
$key2 = rnp_locate_key($ffi, 'userid', 'bob@beispiel.de');
// Quelldatei und Ausgabedatei
$input = rnp_input_from_path('/pfad/zur/geheimen_datei.txt');
$output = rnp_output_to_path('/pfad/zur/verschluesselt.pgp');
// Verschlüsselung für beide Empfänger
$success = rnp_op_encrypt($ffi, $input, $output, [$key1, $key2], [
'cipher' => 'AES256',
'armor' => false,
]);
echo $success ? "Datei erfolgreich verschlüsselt." : "Verschlüsselung fehlgeschlagen.";
rnp_input_destroy($input);
rnp_output_destroy($output);
rnp_ffi_destroy($ffi);
// Wichtig · Fallstricke
Sicherheitshinweise:
- Verwende stets aktuelle, vertrauenswürdige öffentliche Schlüssel der Empfänger. Ein veralteter oder kompromittierter Schlüssel untergräbt die Sicherheit der Verschlüsselung vollständig.
- Bevorzuge starke Algorithmen wie
AES256. Veraltete Algorithmen wie3DESoderCAST5sollten vermieden werden. - Der
armor-Modus (ASCII-Armor) ist für Textkanäle sinnvoll (z. B. E-Mail), erhöht aber die Datenmenge um etwa 33 %. Für binäre Kanäle kann er deaktiviert werden. - Die Funktion gehört zur PECL-Extension rnp und ist nicht Teil der PHP-Standarddistribution. Sie muss separat installiert werden (
pecl install rnp). - Fehlerbehandlung: Im Fehlerfall gibt die Funktion
falsezurück; detailliertere Fehlermeldungen können überrnp_last_error()bzw.rnp_last_error_str()abgerufen werden.