Enkripsi PDF dengan AES-256 dan pengaturan izin
Sekilas pandang
Bagian berjudul “Sekilas pandang”Gunakan resep ini untuk mengenkripsi dokumen dengan AES-256. Anda akan menetapkan kata sandi pengguna, kata sandi pemilik, dan bitmask izin yang membatasi operasi yang diperbolehkan. Resep ini mengikuti examples/22-protection.php.
Reprodusibilitas — mengapa resep ini bersifat
structural, bukanbitwise. Sebuah PDF AES-256 tidak pernah identik byte demi byte antareksekusi, bahkan dengan input yang sama dan kata sandi yang sama. Sebelum menurunkan kunci enkripsi berkas, standard security handler revisi-6 menghasilkan 16 byte acak baru (salt validasi dan kunci user/owner) untuk setiap enkripsi dengan generator angka acak yang kuat (ISO 32000-2 §7.6.4, Algorithm 2.B). AES-256-CBC menggunakan vektor inisialisasi acak untuk setiap objek. Entri trailer/IDjuga merupakan larik berisi dua string byte. Elemen pertamanya adalah pengidentifikasi permanen yang diturunkan dari berkas pada saat pembuatan (ISO 32000-2 §14.4). Oleh karena itu, profil reprodusibilitasnya bersifatstructural: sebelum membandingkan dua eksekusi, harness mengkanonikalisasi salt/IV enkripsi, urutan objek, dan/IDtrailer, alih-alih menegaskan kecocokan byte yang mustahil.
Prasyarat
Bagian berjudul “Prasyarat”- Core telah terpasang:
composer require nextpdf/core:^3. - Ekstensi PHP
openssl, yang diperlukan oleh encryptor AES-256.
- Buat dokumen.
- Panggil
setEncryption()sebelumaddPage(). Encryptor harus siap sebelum objek konten apa pun ditulis. - Berikan kata sandi pengguna (diperlukan untuk membuka dokumen), kata sandi pemilik (untuk akses penuh), dan bitmask izin.
- Tambahkan konten, lalu simpan. Writer akan mengenkripsi badan setiap objek.
Contoh lengkap
Bagian berjudul “Contoh lengkap”<?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";Keluaran yang diharapkan
Bagian berjudul “Keluaran yang diharapkan”Wrote encrypted.pdf (AES-256, printing only)Saat Anda membuka encrypted.pdf, pembaca akan meminta kata sandi. Kata sandi pengguna membuka dokumen dengan kumpulan izin yang dibatasi. Kata sandi pemilik membukanya dengan akses penuh.
Kasus tepi
Bagian berjudul “Kasus tepi”- Urutan pemanggilan.
setEncryption()setelahaddPage()tidak mengenkripsi konten sebelumnya secara retroaktif. Selalu konfigurasikan enkripsi terlebih dahulu. - Kata sandi pemilik bawaan. Ketika kata sandi pemilik kosong, engine menggunakan kembali kata sandi pengguna sebagai kata sandi pemilik. Tetapkan kata sandi yang berbeda ketika kedua peran ini perlu dibedakan.
- Semantik izin — batasan. Pembaca yang patuh akan menghormati bit izin tersebut. Bit-bit ini tidak ditegakkan secara kriptografis: pembaca yang mengabaikan bit tersebut, atau alat yang digunakan dengan kata sandi pemilik, dapat melakukan operasi yang dibatasi. Perlakukan izin sebagai sinyal kebijakan bagi perangkat lunak yang kooperatif, bukan sebagai kontrol akses yang tahan terhadap pihak yang bertekad.
- Konflik dengan PDF/A. PDF/A melarang kunci trailer
Encrypt. MemanggilsetEncryption()pada dokumen PDF/A, dalam urutan mana pun, akan melempar eksepsi ketidakcocokan. Lihat Gerbang konformansi PDF/A-4. - AES-256-GCM.
useAesGcm()mengaktifkan enkripsi massal GCM ISO/TS 32003 ketika OpenSSL atau libsodium pada host menyediakan cipher tersebut. Jika tidak tersedia, pemanggilan ini akan melemparInvalidConfigException.
Konformansi
Bagian berjudul “Konformansi”| Pernyataan | Spesifikasi | Klausul | reference_id |
|---|---|---|---|
| Standard security handler menentukan algoritma enkripsi dan panjang kunci. | ISO 32000-2 | §7.6 | |
Entri P pada encryption dictionary membawa bit izin. | ISO 32000-2 | §7.6 |
Enkripsi melindungi kerahasiaan konten dari pihak yang tidak memiliki kata sandi. Bit izin bersifat anjuran bagi pembaca dan, dengan sendirinya, tidak mencegah alat yang tidak patuh untuk melakukan tindakan.