İçeriğe geç

Bir PDF dosyasını AES-256 ile şifreleyin ve izinleri ayarlayın

Bir belgeyi AES-256 ile şifrelemek için bu tarifi kullanın. Kullanıcı parolası, sahip parolası ve izin verilen işlemleri kısıtlayan bir izin bit maskesi ayarlarsınız. Bu tarif examples/22-protection.php dosyasını temel alır.

Yeniden üretilebilirlik — bu tarif neden bitwise değil, structural. AES-256 ile şifrelenmiş bir PDF, aynı girdi ve parolalarla bile çalıştırmalar arasında bayt düzeyinde asla aynı değildir. Dosya şifreleme anahtarını türetmeden önce, revizyon 6 standart güvenlik işleyicisi her şifreleme işleminde güçlü bir rastgele sayı üreteci kullanarak 16 yeni rastgele bayt (user/owner doğrulama ve anahtar tuzları) üretir (ISO 32000-2 §7.6.4, Algoritma 2.B). AES-256-CBC, her nesne için rastgele bir başlatma vektörü kullanır. trailer’daki /ID de iki bayt dizesinden oluşan bir dizidir. İlk öğesi, oluşturma zamanında dosyadan türetilen kalıcı bir tanımlayıcıdır (ISO 32000-2 §14.4). Bu nedenle yeniden üretilebilirlik profili structural niteliktedir: harness, iki çalıştırmayı karşılaştırmadan önce imkânsız bir bayt eşleşmesi beklemek yerine şifreleme tuzlarını/IV’yi, nesne sırasını ve trailer /ID’yi kanonikleştirir.

  • Core kurulu olmalıdır: composer require nextpdf/core:^3.
  • AES-256 şifreleyicisinin gerektirdiği openssl PHP uzantısı etkin olmalıdır.
  1. Belgeyi oluşturun.
  2. Önce setEncryption(), sonra addPage() çağırın. Herhangi bir içerik nesnesi yazılmadan önce şifreleyici hazır olmalıdır.
  3. Bir kullanıcı parolası (belgeyi açmak için gereklidir), bir sahip parolası (tam erişim için) ve bir izin bit maskesi iletin.
  4. İçerik ekleyin ve kaydedin. Yazıcı her nesne gövdesini şifreler.
<?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)

Oluşturulan encrypted.pdf dosyasını açtığınızda okuyucu parola ister. Kullanıcı parolası belgeyi kısıtlanmış izin kümesiyle açar. Sahip parolası ise belgeyi tam erişimle açar.

  • Çağrı sırası. setEncryption() işlevi addPage() işlevinden sonra çağrılırsa, daha önceki içeriği geriye dönük olarak şifrelemez. Şifrelemeyi her zaman önce yapılandırın.
  • Sahip parolası varsayılanı. Sahip parolası boş bırakıldığında, motor kullanıcı parolasını sahip parolası olarak yeniden kullanır. Bu rollerin farklı olması gerekiyorsa ayrı parolalar ayarlayın.
  • İzin anlambilimi — sınır. Uyumlu okuyucular izin bitlerine uyar. Bu izinler kriptografik olarak zorunlu tutulmaz: bitleri yok sayan bir okuyucu veya sahip parolasıyla kullanılan bir araç, kısıtlanmış işlemleri gerçekleştirebilir. İzinleri, kararlı bir tarafa karşı dayanıklı bir erişim denetimi olarak değil, iş birliği yapan yazılımlar için bir ilke sinyali olarak değerlendirin.
  • PDF/A çakışması. PDF/A, trailer’daki Encrypt anahtarını yasaklar. Bir PDF/A belgesinde setEncryption() işlevinin çağrılması, çağrı sırası ne olursa olsun bir uyumsuzluk istisnası fırlatır. PDF/A-4 uygunluk geçidi bölümüne bakın.
  • AES-256-GCM. Ana makinedeki OpenSSL veya libsodium şifreleme algoritmasını sağladığında, useAesGcm() ISO/TS 32003 GCM toplu şifrelemesini etkinleştirir. Aksi durumda InvalidConfigException fırlatır.
İfadeSpesifikasyonMaddereference_id
Standart güvenlik işleyicisi, şifreleme algoritmasını ve anahtar uzunluğunu tanımlar.ISO 32000-2§7.6
Şifreleme sözlüğünün P girdisi, izin bitlerini taşır.ISO 32000-2§7.6

Şifreleme, içerik gizliliğini parolaya sahip olmayan taraflara karşı korur. İzin bitleri okuyuculara yol gösterir ve tek başlarına, uyumlu olmayan bir aracın işlem yapmasını engellemez.