Criptografe um PDF com AES-256 e configure permissões
Visão geral
Seção intitulada “Visão geral”Use esta receita para criptografar um documento com AES-256. Você define uma senha de usuário, uma senha de proprietário e uma máscara de bits de permissões que restringe as operações permitidas. Esta receita se baseia em examples/22-protection.php.
Reprodutibilidade — por que esta receita é
structural, e nãobitwise. Um PDF criptografado com AES-256 nunca é idêntico byte a byte entre execuções, mesmo com a mesma entrada e as mesmas senhas. Antes de derivar a chave de criptografia do arquivo, o manipulador de segurança padrão da revisão 6 gera 16 novos bytes aleatórios (os salts de validação e de chave de user/owner) para cada criptografia, usando um gerador forte de números aleatórios (ISO 32000-2 §7.6.4, Algorithm 2.B). O AES-256-CBC usa um vetor de inicialização aleatório para cada objeto. O trailer/IDtambém é um array com duas cadeias de bytes. Seu primeiro elemento é um identificador permanente derivado do arquivo no momento da criação (ISO 32000-2 §14.4). O perfil de reprodutibilidade é, portanto,structural: antes de comparar duas execuções, o harness canonicaliza os salts/IV de criptografia, a ordem dos objetos e o/IDdo trailer, em vez de exigir uma correspondência de bytes impossível.
Pré-requisitos
Seção intitulada “Pré-requisitos”- Core instalado:
composer require nextpdf/core:^3. - A extensão PHP
opensslhabilitada, exigida pelo criptografador AES-256.
Receita
Seção intitulada “Receita”- Crie o documento.
- Chame
setEncryption()antes deaddPage(). O criptografador precisa estar pronto antes que qualquer objeto de conteúdo seja gravado. - Informe uma senha de usuário (necessária para abrir o documento), uma senha de proprietário (para acesso total) e uma máscara de bits de permissões.
- Adicione o conteúdo e salve. O gravador criptografa o corpo de cada objeto.
Exemplo completo
Seção intitulada “Exemplo 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";Saída esperada
Seção intitulada “Saída esperada”Wrote encrypted.pdf (AES-256, printing only)Quando você abre encrypted.pdf, o leitor solicita uma senha. A senha de usuário abre o documento com o conjunto de permissões restrito. A senha de proprietário abre o documento com acesso total.
Casos extremos
Seção intitulada “Casos extremos”- Ordem de chamada.
setEncryption()apósaddPage()não criptografa retroativamente o conteúdo já gravado. Sempre configure a criptografia primeiro. - Padrão da senha de proprietário. Quando a senha de proprietário está vazia, o engine reutiliza a senha de usuário como senha de proprietário. Defina senhas distintas quando essas funções precisarem ser diferentes.
- Semântica de permissões — limite. Leitores em conformidade respeitam os bits de permissão. Esses bits não são impostos criptograficamente: um leitor que ignore os bits, ou uma ferramenta usada com a senha de proprietário, pode realizar operações restritas. Trate as permissões como um sinal de política para softwares cooperativos, não como um controle de acesso que resista a uma parte determinada.
- Conflito com PDF/A. O PDF/A proíbe a chave de trailer
Encrypt. ChamarsetEncryption()em um documento PDF/A, em qualquer ordem, lança uma exceção de incompatibilidade. Consulte Gate de conformidade PDF/A-4. - AES-256-GCM.
useAesGcm()ativa a criptografia em massa GCM do ISO/TS 32003 quando a cifra está disponível no OpenSSL ou no libsodium do host. Caso contrário, lançaInvalidConfigException.
Conformidade
Seção intitulada “Conformidade”| Declaração | Especificação | Cláusula | reference_id |
|---|---|---|---|
| O manipulador de segurança padrão define o algoritmo de criptografia e o comprimento da chave. | ISO 32000-2 | §7.6 | |
A entrada P do dicionário de criptografia carrega os bits de permissão. | ISO 32000-2 | §7.6 |
A criptografia protege a confidencialidade do conteúdo contra partes que não têm a senha. Os bits de permissão são consultivos para os leitores e, por si só, não impedem que uma ferramenta fora de conformidade realize ações.