Crittografia (HasSecurity)
Il trait HasSecurity su Document fornisce crittografia AES-256 tramite il motore Aes256Encryptor. TCPDF-Next implementa esclusivamente il gestore sicurezza PDF 2.0 (AESV3, Revision 6, V5) — RC4 e AES-128 sono deliberatamente rimossi. Le password sono normalizzate tramite SASLprep (RFC 4013) per gestione Unicode appropriata, e la derivazione chiave usa Algorithm 2.B (iterativo SHA-256/384/512).
Riferimento Rapido
| Metodo | Descrizione |
|---|---|
setProtection() | Abilita crittografia AES-256 con permessi e password |
Abilitazione Crittografia
use Yeeefang\TcpdfNext\Core\Document;
$pdf = Document::create()
->setProtection(
permissions: ['print', 'copy'],
userPass: 'reader-password',
ownerPass: 'owner-secret-password',
)
->addPage()
->setFont('Helvetica', '', 12)
->cell(0, 10, 'This PDF is AES-256 encrypted', newLine: true)
->save('encrypted.pdf');setProtection() restituisce static, quindi si concatena con ogni altro metodo Document.
$pdf->setProtection(
array $permissions = [], // Flag permessi (vedi tabella sotto)
string $userPass = '', // Password richiesta per aprire documento
string $ownerPass = '', // Password per accesso illimitato
);Password Utente vs Password Proprietario
- Password utente — il lettore deve inserire questa password per aprire e visualizzare il PDF. Quando vuota, il documento si apre senza prompt ma le restrizioni permessi si applicano comunque.
- Password proprietario — garantisce accesso completo al documento, bypassando tutte le restrizioni permessi. Quando vuota, una password proprietario casuale 32-byte è generata internamente.
Entrambe le password sono normalizzate tramite SASLprep (RFC 4013) prima della derivazione chiave. Questo assicura che password Unicode come "Pässwörd" siano gestite consistentemente attraverso tutti i visualizzatori PDF.
Flag Permessi
Passa qualsiasi combinazione di questi flag stringa nell'array $permissions:
| Flag | Descrizione |
|---|---|
print | Consenti stampa (bassa risoluzione) |
modify | Consenti modifica contenuto |
copy | Consenti estrazione testo e immagini |
annotate | Consenti aggiunta annotazioni |
fill-forms | Consenti riempimento campi form |
extract | Consenti estrazione accessibilità |
assemble | Consenti inserimento, rotazione ed eliminazione pagine |
print-highres | Consenti stampa alta risoluzione |
Quando $permissions è vuoto, tutte le operazioni sono ristrette (password proprietario richiesta per qualsiasi azione).
Crittografia Solo-Proprietario
Per restringere permessi senza richiedere password per aprire:
use Yeeefang\TcpdfNext\Core\Document;
$pdf = Document::create()
->setProtection(
permissions: ['print', 'fill-forms'],
ownerPass: 'admin-password',
)
->addPage()
->setFont('Helvetica', '', 12)
->cell(0, 10, 'Open freely, but only print and fill forms.', newLine: true)
->save('restricted.pdf');Il documento si apre senza prompt password, ma modifica, copia e annotazione sono bloccate a meno che la password proprietario non sia fornita.
Architettura Sicurezza
TCPDF-Next impone esclusivamente lo standard crittografia PDF più forte:
- Algoritmo: AES-256-CBC (AESV3), Revision 6, V5
- Lunghezza chiave: 256 bit
- No legacy: RC4 e AES-128 sono deliberatamente rimossi
Normalizzazione Password SASLprep
La classe SaslPrep (RFC 4013) normalizza password con normalizzazione Unicode NFKC, rifiuta caratteri proibiti e impone vincoli testo bidirezionale. Questo assicura hash identici indipendentemente da piattaforma o metodo input.