Przejdź do głównej zawartości

Szyfrowanie pliku PDF algorytmem AES-256 i ustawianie uprawnień

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 nie bitwise. 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 /ID jest 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 zatem structural: zanim porówna dwa uruchomienia, narzędzie testowe kanonizuje sole/IV szyfrowania, kolejność obiektów i /ID trailera, zamiast wymagać niemożliwej zgodności bajtowej.

  • Zainstalowany Core: composer require nextpdf/core:^3.
  • Włączone rozszerzenie PHP openssl, wymagane przez moduł szyfrujący AES-256.
  1. Utwórz dokument.
  2. Wywołaj setEncryption() przed addPage(). Moduł szyfrujący musi być gotowy, zanim zostanie zapisany jakikolwiek obiekt zawartości.
  3. Przekaż hasło użytkownika (wymagane do otwarcia dokumentu), hasło właściciela (dające pełny dostęp) oraz maskę bitową uprawnień.
  4. Dodaj zawartość i zapisz. Moduł zapisujący szyfruje treść każdego obiektu.
<?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";
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.

  • Kolejność wywołań. setEncryption() po addPage() 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łanie setEncryption() 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łasza InvalidConfigException.
StwierdzenieSpecyfikacjaKlauzulareference_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.