PDF mit AES-256 verschlüsseln und Berechtigungen setzen
Auf einen Blick
Abschnitt betitelt „Auf einen Blick“Dieses Recipe verschlüsselt ein Dokument mit AES-256. Es setzt ein Benutzerpasswort und ein Eigentümerpasswort und schränkt Operationen anhand einer Berechtigungsbitmaske ein. Das Recipe folgt examples/22-protection.php.
Reproduzierbarkeit — warum dieses Recipe
structuralund nichtbitwiseist. Ein AES-256-PDF kann in zwei Durchläufen niemals bytegenau identisch sein, selbst bei gleicher Eingabe und gleichen Passwörtern. Der Standard-Security-Handler in Revision 6 erzeugt 16 frische Zufallsbytes (die user/owner-Validierungs- und Schlüssel-Salts) pro Verschlüsselung mit einem starken Zufallszahlengenerator, bevor der Dateiverschlüsselungsschlüssel abgeleitet wird (ISO 32000-2 §7.6.4, Algorithmus 2.B). AES-256-CBC verwendet pro Objekt einen zufälligen Initialisierungsvektor. Der Trailer/IDist ebenfalls ein Array aus zwei Byte-Strings, dessen erstes Element ein permanenter Bezeichner ist, der zum Erstellungszeitpunkt aus der Datei abgeleitet wird (ISO 32000-2 §14.4). Das Reproduzierbarkeitsprofil ist daherstructural: Der Harness kanonisiert die Verschlüsselungs-Salts/IV, die Objektreihenfolge und die Trailer-/IDbevor zwei Durchläufe verglichen werden, statt eine unmögliche Byte-Übereinstimmung zu garantieren.
Voraussetzungen
Abschnitt betitelt „Voraussetzungen“- Core ist installiert:
composer require nextpdf/core:^3. - Die PHP-Erweiterung
opensslist aktiviert; sie wird vom AES-256-Encryptor verwendet.
- Erstellen Sie das Dokument.
- Rufen Sie
setEncryption()voraddPage()auf. Der Encryptor muss vorhanden sein, bevor ein Inhaltsobjekt geschrieben wird. - Übergeben Sie ein Benutzerpasswort (zum Öffnen des Dokuments erforderlich), ein Eigentümerpasswort (Vollzugriff) und eine Berechtigungsbitmaske.
- Fügen Sie Inhalt hinzu und speichern Sie. Der Writer verschlüsselt jeden Objektkörper.
Vollständiges Beispiel
Abschnitt betitelt „Vollständiges Beispiel“<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Core\Document;
// Permission bits (ISO 32000-2, encryption dictionary P entry):// bit 3 (4) allow printing// bit 4 (8) allow content modification// bit 5 (16) allow text extraction / copying// bit 6 (32) allow annotation and form editing// Grant printing only:$permissions = 4;
$doc = Document::createStandalone();$doc->setTitle('Encrypted Document');
// setEncryption() MUST run before addPage(). Order matters.$doc->setEncryption( userPassword: 'open-me', ownerPassword: 'owner-secret', permissions: $permissions,);
$doc->addPage();$doc->setFont('helvetica', '', 12);$doc->cell(0, 10, 'This document is encrypted with AES-256.', newLine: true);
$doc->save(__DIR__ . '/encrypted.pdf');
echo "Wrote encrypted.pdf (AES-256, printing only)\n";Erwartete Ausgabe
Abschnitt betitelt „Erwartete Ausgabe“Wrote encrypted.pdf (AES-256, printing only)Beim Öffnen von encrypted.pdf wird nach einem Passwort gefragt. Das Benutzerpasswort öffnet das Dokument mit dem eingeschränkten Berechtigungssatz. Das Eigentümerpasswort öffnet es mit Vollzugriff.
Randfälle
Abschnitt betitelt „Randfälle“- Aufrufreihenfolge.
setEncryption()nachaddPage()verschlüsselt bereits geschriebenen Inhalt nicht nachträglich. Konfigurieren Sie die Verschlüsselung immer zuerst. - Standard für das Eigentümerpasswort. Wenn das Eigentümerpasswort leer ist, verwendet die Engine das Benutzerpasswort auch als Eigentümerpasswort. Setzen Sie unterschiedliche Passwörter, wenn sich die beiden Rollen unterscheiden müssen.
- Berechtigungssemantik — Grenze. Die Berechtigungsbits werden von konformen Readern beachtet. Sie werden jedoch nicht kryptografisch erzwungen: Ein Reader, der die Bits ignoriert, oder ein Tool, das mit dem Eigentümerpasswort verwendet wird, kann eingeschränkte Operationen ausführen. Behandeln Sie Berechtigungen als Richtliniensignal für kooperierende Software, nicht als Zugriffskontrolle, die einem entschlossenen Akteur standhält.
- PDF/A-Konflikt. PDF/A verbietet den Trailer-Schlüssel
Encrypt. Der Aufruf vonsetEncryption()auf einem PDF/A-Dokument wirft unabhängig von der Reihenfolge eine Inkompatibilitäts-Exception. Siehe PDF/A-4-Konformitäts-Gate. - AES-256-GCM.
useAesGcm()aktiviert die ISO/TS-32003-GCM-Bulk-Verschlüsselung, wenn OpenSSL auf dem Hostsystem oder libsodium die Chiffre unterstützt. Andernfalls wirdInvalidConfigExceptiongeworfen.
Konformität
Abschnitt betitelt „Konformität“| Aussage | Spezifikation | Abschnitt | reference_id |
|---|---|---|---|
| Der Standard-Security-Handler definiert den Verschlüsselungsalgorithmus und die Schlüssellänge. | ISO 32000-2 | §7.6 | |
Der Eintrag P im Verschlüsselungs-Dictionary trägt die Berechtigungsbits. | ISO 32000-2 | §7.6 |
Die Verschlüsselung schützt die Vertraulichkeit des Inhalts gegenüber Parteien ohne das Passwort. Berechtigungsbits dienen Readern nur als Hinweis und halten ein nicht-konformes Tool für sich genommen nicht von entsprechenden Operationen ab.