Skip to content

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

MetodoDescrizione
setProtection()Abilita crittografia AES-256 con permessi e password

Abilitazione Crittografia

php
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.

php
$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:

FlagDescrizione
printConsenti stampa (bassa risoluzione)
modifyConsenti modifica contenuto
copyConsenti estrazione testo e immagini
annotateConsenti aggiunta annotazioni
fill-formsConsenti riempimento campi form
extractConsenti estrazione accessibilità
assembleConsenti inserimento, rotazione ed eliminazione pagine
print-highresConsenti 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:

php
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.

Rilasciato sotto licenza LGPL-3.0-or-later.