Een PDF versleutelen met AES-256 en machtigingen instellen
In een oogopslag
Sectie met titel “In een oogopslag”Gebruik dit recept om een document met AES-256 te versleutelen. Je stelt een gebruikerswachtwoord, een eigenaarswachtwoord en een machtigingsbitmasker in dat de toegestane bewerkingen beperkt. Het recept volgt examples/22-protection.php.
Reproduceerbaarheid — waarom dit recipe
structuralis en nietbitwise. Een AES-256-PDF is tussen afzonderlijke runs nooit byte-identiek, zelfs niet met dezelfde invoer en dezelfde wachtwoorden. Voordat de bestandsversleutelingssleutel wordt afgeleid, genereert de standaard security handler van revisie 6 per versleuteling 16 nieuwe willekeurige bytes (de user/owner validatie- en sleutel-salts) met een sterke generator voor willekeurige getallen (ISO 32000-2 §7.6.4, Algorithm 2.B). AES-256-CBC gebruikt voor elk object een willekeurige initialisatievector. De trailer-/IDis eveneens een array van twee byte-strings. Het eerste element is een permanente identifier die bij het aanmaken uit het bestand wordt afgeleid (ISO 32000-2 §14.4). Daarom is het reproduceerbaarheidsprofielstructural: voordat twee runs worden vergeleken, canoniseert de harness de versleutelings-salts/IV, de objectvolgorde en de trailer-/ID, in plaats van een onmogelijke byte-overeenkomst af te dwingen.
Vereisten
Sectie met titel “Vereisten”- Core geïnstalleerd:
composer require nextpdf/core:^3. - De PHP-extensie
opensslmoet ingeschakeld zijn; die is vereist voor de AES-256-encryptor.
- Maak het document aan.
- Roep
setEncryption()vóóraddPage()aan. De encryptor moet gereed zijn voordat er een inhoudsobject wordt geschreven. - Geef een gebruikerswachtwoord (vereist om het document te openen), een eigenaarswachtwoord (voor volledige toegang) en een machtigingsbitmasker door.
- Voeg inhoud toe en sla op. De writer versleutelt de body van elk object.
Volledig voorbeeld
Sectie met titel “Volledig voorbeeld”<?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";Verwachte uitvoer
Sectie met titel “Verwachte uitvoer”Wrote encrypted.pdf (AES-256, printing only)Wanneer je encrypted.pdf opent, vraagt de reader om een wachtwoord. Met het gebruikerswachtwoord open je het document met de beperkte machtigingenset. Met het eigenaarswachtwoord open je het met volledige toegang.
Randgevallen
Sectie met titel “Randgevallen”- Aanroepvolgorde.
setEncryption()naaddPage()versleutelt eerder geschreven inhoud niet met terugwerkende kracht. Stel versleuteling daarom altijd eerst in. - Standaard eigenaarswachtwoord. Als het eigenaarswachtwoord leeg is, hergebruikt de engine het gebruikerswachtwoord als eigenaarswachtwoord. Stel verschillende wachtwoorden in als deze rollen van elkaar moeten verschillen.
- Machtigingssemantiek — beperking. Conforme readers respecteren de machtigingsbits. Ze worden niet cryptografisch afgedwongen: een reader die de bits negeert, of een tool die met het eigenaarswachtwoord wordt gebruikt, kan beperkte bewerkingen uitvoeren. Behandel machtigingen als een beleidssignaal voor meewerkende software, niet als toegangsbeheer dat bestand is tegen een vastberaden partij.
- PDF/A-conflict. PDF/A verbiedt de trailer-sleutel
Encrypt. Het aanroepen vansetEncryption()op een PDF/A-document werpt, ongeacht de aanroepvolgorde, een incompatibiliteitsuitzondering. Zie PDF/A-4-conformiteitspoort. - AES-256-GCM.
useAesGcm()schakelt ISO/TS 32003 GCM-bulkversleuteling in wanneer de host-OpenSSL of libsodium het cipher beschikbaar stelt. Anders werpt hetInvalidConfigException.
Conformiteit
Sectie met titel “Conformiteit”| Bewering | Specificatie | Clausule | reference_id |
|---|---|---|---|
| De standaard security handler bepaalt het versleutelingsalgoritme en de sleutellengte. | ISO 32000-2 | §7.6 | |
De P-entry van de versleutelingsdictionary bevat de machtigingsbits. | ISO 32000-2 | §7.6 |
Versleuteling beschermt de vertrouwelijkheid van de inhoud tegen partijen zonder het wachtwoord. Machtigingsbits zijn adviserend voor readers en verhinderen op zichzelf niet dat een niet-conforme tool actie onderneemt.