Szyfrowanie pliku PDF algorytmem AES-256 i ustawianie uprawnień
W skrócie
Dział zatytułowany „W skrócie”Skorzystaj z tego przepisu, aby zaszyfrować dokument algorytmem AES-256. Ustawisz hasło użytkownika, hasło właściciela oraz maskę bitową uprawnień, która ogranicza dozwolone operacje. Przepis jest zgodny z examples/22-protection.php.
Odtwarzalność — dlaczego ten przepis jest
structural, a niebitwise. Plik PDF zaszyfrowany algorytmem AES-256 nigdy nie jest bajtowo identyczny między kolejnymi uruchomieniami, nawet przy tych samych danych wejściowych i hasłach. Przed wyprowadzeniem klucza szyfrowania pliku standardowy moduł obsługi zabezpieczeń rewizji 6 generuje 16 nowych losowych bajtów (sole walidacji user/owner oraz klucza) dla każdego szyfrowania przy użyciu silnego generatora liczb losowych (ISO 32000-2 §7.6.4, Algorytm 2.B). AES-256-CBC używa losowego wektora inicjującego dla każdego obiektu. Wpis w trailerze/IDjest również tablicą dwóch ciągów bajtów. Jego pierwszym elementem jest trwały identyfikator wyprowadzony z pliku w chwili jego utworzenia (ISO 32000-2 §14.4). Profil odtwarzalności to zatemstructural: zanim porówna dwa uruchomienia, narzędzie testowe kanonizuje sole/IV szyfrowania, kolejność obiektów i/IDtrailera, zamiast wymagać niemożliwej zgodności bajtowej.
Wymagania wstępne
Dział zatytułowany „Wymagania wstępne”- Zainstalowany Core:
composer require nextpdf/core:^3. - Włączone rozszerzenie PHP
openssl, wymagane przez moduł szyfrujący AES-256.
Przepis
Dział zatytułowany „Przepis”- Utwórz dokument.
- Wywołaj
setEncryption()przedaddPage(). Moduł szyfrujący musi być gotowy, zanim zostanie zapisany jakikolwiek obiekt zawartości. - Przekaż hasło użytkownika (wymagane do otwarcia dokumentu), hasło właściciela (dające pełny dostęp) oraz maskę bitową uprawnień.
- Dodaj zawartość i zapisz. Moduł zapisujący szyfruje treść każdego obiektu.
Pełny przykład
Dział zatytułowany „Pełny przykład”<?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";Oczekiwane wyjście
Dział zatytułowany „Oczekiwane wyjście”Wrote encrypted.pdf (AES-256, printing only)Po otwarciu encrypted.pdf czytnik poprosi o hasło. Hasło użytkownika otwiera dokument z ograniczonym zakresem uprawnień. Hasło właściciela otwiera go z pełnym dostępem.
Przypadki brzegowe
Dział zatytułowany „Przypadki brzegowe”- Kolejność wywołań.
setEncryption()poaddPage()nie szyfruje z mocą wsteczną wcześniej dodanej zawartości. Zawsze najpierw skonfiguruj szyfrowanie. - Domyślne hasło właściciela. Gdy hasło właściciela jest puste, silnik używa ponownie hasła użytkownika jako hasła właściciela. Ustaw odrębne hasła, gdy te role muszą się różnić.
- Semantyka uprawnień — ograniczenie. Zgodne czytniki respektują bity uprawnień. Nie są one wymuszane kryptograficznie: czytnik, który ignoruje te bity, lub narzędzie użyte z hasłem właściciela, może wykonywać operacje objęte ograniczeniami. Traktuj uprawnienia jako sygnał zasad dla współpracującego oprogramowania, a nie jako kontrolę dostępu, która oprze się zdeterminowanemu podmiotowi.
- Konflikt z PDF/A. PDF/A nie dopuszcza klucza trailera
Encrypt. WywołaniesetEncryption()na dokumencie PDF/A, niezależnie od kolejności, zgłasza wyjątek niezgodności. Zobacz Bramka zgodności PDF/A-4. - AES-256-GCM.
useAesGcm()włącza szyfrowanie masowe GCM zgodne z ISO/TS 32003, gdy OpenSSL lub libsodium na hoście udostępnia ten szyfr. W przeciwnym razie zgłaszaInvalidConfigException.
Zgodność
Dział zatytułowany „Zgodność”| Stwierdzenie | Specyfikacja | Klauzula | reference_id |
|---|---|---|---|
| Standardowy moduł obsługi zabezpieczeń definiuje algorytm szyfrowania i długość klucza. | ISO 32000-2 | §7.6 | |
Wpis P słownika szyfrowania zawiera bity uprawnień. | ISO 32000-2 | §7.6 |
Szyfrowanie chroni poufność zawartości przed stronami, które nie mają hasła. Bity uprawnień mają dla czytników charakter doradczy i same w sobie nie powstrzymują narzędzia, które ich nie respektuje, przed wykonaniem operacji.