Cifrare un PDF con AES-256 e configurare le autorizzazioni
In breve
Sezione intitolata “In breve”Questa ricetta mostra come cifrare un documento con AES-256, impostando una password utente e una password proprietario e limitando le operazioni tramite una bitmask delle autorizzazioni. Segue examples/22-protection.php.
Riproducibilità — perché questa ricetta è
structural, nonbitwise. Un PDF AES-256 non può mai essere byte-identico tra due esecuzioni, neppure a parità di input e password. Il gestore di sicurezza standard di revisione 6 genera 16 byte casuali nuovi (per la convalida user/owner e i salt della chiave) per ogni cifratura, tramite un generatore di numeri casuali robusto, prima di derivare la chiave di cifratura del file (ISO 32000-2 §7.6.4, algoritmo 2.B). AES-256-CBC utilizza un vettore di inizializzazione casuale per ogni oggetto. Il trailer/IDè anch’esso un array di due stringhe di byte il cui primo elemento è un identificatore permanente derivato dal file al momento della creazione (ISO 32000-2 §14.4). Il profilo di riproducibilità è quindistructural: l’harness canonicalizza i salt/IV di cifratura, l’ordine degli oggetti e l’/IDdel trailer prima di confrontare due esecuzioni, invece di pretendere una corrispondenza byte per byte impossibile.
Prerequisiti
Sezione intitolata “Prerequisiti”- Core installato:
composer require nextpdf/core:^3. - L’estensione PHP
openssldeve essere abilitata; è usata dal componente di cifratura AES-256.
Ricetta
Sezione intitolata “Ricetta”- Creare il documento.
- Chiamare
setEncryption()prima diaddPage(). Il componente di cifratura deve essere presente prima che venga scritto qualunque oggetto di contenuto. - Passare una password utente (richiesta per aprire il documento), una password proprietario (accesso completo) e una bitmask delle autorizzazioni.
- Aggiungere il contenuto e salvare. Il writer cifra il corpo di ogni oggetto.
Esempio completo
Sezione intitolata “Esempio completo”<?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";Output previsto
Sezione intitolata “Output previsto”Wrote encrypted.pdf (AES-256, printing only)Per aprire encrypted.pdf è richiesta una password. La password utente consente di aprirlo con il set di autorizzazioni limitato. La password proprietario consente di aprirlo con accesso completo.
Casi limite
Sezione intitolata “Casi limite”- Ordine di chiamata.
setEncryption()dopoaddPage()non cifra retroattivamente il contenuto già scritto. Configurare sempre prima la cifratura. - Password proprietario predefinita. Quando la password proprietario è vuota, il motore riutilizza la password utente come password proprietario. Impostare password distinte quando i due ruoli devono rimanere separati.
- Semantica delle autorizzazioni — limite. I bit delle autorizzazioni sono rispettati dai reader conformi. Non sono applicati a livello crittografico: un reader che ignora i bit, oppure uno strumento usato con la password proprietario, può eseguire le operazioni soggette a restrizione. Considerare le autorizzazioni come un’indicazione di criterio destinata al software cooperante, non come un controllo di accesso in grado di resistere a un soggetto determinato.
- Conflitto con PDF/A. PDF/A vieta la chiave
Encryptdel trailer. ChiamaresetEncryption()su un documento PDF/A, in qualsiasi ordine, genera un’eccezione di incompatibilità. Vedere Gate di conformità PDF/A-4. - AES-256-GCM.
useAesGcm()abilita la cifratura in blocco GCM di ISO/TS 32003 quando OpenSSL o libsodium sull’host rendono disponibile il cifrario. In caso contrario, generaInvalidConfigException.
Conformità
Sezione intitolata “Conformità”| Dichiarazione | Specifica | Clausola | reference_id |
|---|---|---|---|
| Il gestore di sicurezza standard definisce l’algoritmo di cifratura e la lunghezza della chiave. | ISO 32000-2 | §7.6 | |
La voce P del dizionario di cifratura contiene i bit delle autorizzazioni. | ISO 32000-2 | §7.6 |
La cifratura tutela la riservatezza del contenuto rispetto alle parti che non dispongono della password. I bit delle autorizzazioni hanno valore indicativo per i reader e, da soli, non impediscono a uno strumento non conforme di agire.