|
Determina o método de criptografia do arquivo PDF.
type
THPDFKeyType = ( k40, k128, aes128, aes256, aesgcm );
Sintaxe Delphi:
property CryptKeyLength: THPDFKeyType;
Sintaxe C++:
__property THPDFKeyType CryptKeyLength;
Descrição
Use CryptKeyLength para escolher a revisão do security handler padrão e a cifra usadas quando ActivateProtection está habilitado.
Para criptografia por senha AES, defina EncryptMetadata como false antes de BeginDoc para gravar /EncryptMetadata false, deixar os streams XMP /Metadata em texto claro e usar a derivação de chaves AES-128 correspondente ou a flag de metadados /Perms do AES-256. O padrão é true por compatibilidade.
Valor Significado
k40 Security handler padrão V=1, R=2, RC4 com chave de 40 bits (PDF 1.1+).
k128 Security handler padrão V=2, R=3, RC4 com chave de 128 bits (PDF 1.4+).
aes128 Security handler padrão V=4, R=4 com crypt filter StdCF (CFM=AESV2). AES-128 em modo CBC com padding PKCS#7 e vetor de inicialização aleatório de 16 bytes conforme ISO 32000-1 7.6.2 / 7.4.4.2 (PDF 1.6+). Desde o HotPDF v2.4.0 esta opção criptografa strings e streams com uma implementação AES real; builds anteriores emitiam o dicionário AES mas não criptografavam o conteúdo de fato.
aes256 Security handler padrão V=5 com crypt filter StdCF (CFM=AESV3). AES-256 em modo CBC com padding PKCS#7 e vetor de inicialização aleatório de 16 bytes conforme Adobe Extension Level 3 / ISO 32000-2 7.6.4 (PDF 1.7+, aceito pelo Acrobat 9 e posteriores, Foxit, Chrome e os viewers da Apple/macOS). Disponível desde o HotPDF v2.17.0. Selecionar aes256 eleva a versão de saída para PDF 1.7 quando ela é menor, a menos que StrictVersionLock esteja definido; nesse caso uma versão menor recua para AES-128 (antes do v2.760.0, a saída padrão em PDF 1.6 recuava silenciosamente para AES-128). A revisão padrão é R=5 com hash de senha SHA-256. Defina UseAES256R6 como true para mudar para R=6 com o algorithm 2.B "hash dance" do ISO 32000-2 (SHA-256 / SHA-384 / SHA-512 + mixer AES-128); R=6 é exigido pelo Acrobat DC e por validadores PDF/A-4. Disponível desde o HotPDF v2.22.0.
aesgcm Security handler padrão V=6, R=7 com crypt filter StdCF (CFM=AESV4). AES-256-GCM usa um vetor de inicialização único de 12 bytes e uma tag de autenticação de 16 bytes para cada string e stream criptografados, com additional authenticated data vazio, conforme definido pela ISO/TS 32003:2023. Esta opção exige PDF 2.0 e emite a developer extension ISO no extension level 32003. Disponível desde o HotPDF v2.475.0.
Security handler de chave pública (ISO 32000-1 7.6.4, ISO 32000-2 7.6.5)
Para criptografia baseada em certificados (um documento, vários destinatários), chame EnablePubKeyEncryption(seed, KeyType, EncryptMetadata) em vez de definir UserPassword / OwnerPassword. A criptografia de chave pública suporta k40, k128, aes128 e aes256 (aes256 eleva a saída para PDF 2.0, e destinatários de certificado ou de key agreement exigem isso); aesgcm fica limitado ao security handler padrão baseado em senha. O chamador deve construir um blob de envelopedData PKCS#7 por destinatário (CryptoAPI do Windows, OpenSSL ou pycryptodome) e anexar cada blob por meio de AddPubKeyRecipient; a chave de criptografia do arquivo deriva como descrito na ISO 32000-1 7.6.4.3 (SHA-1 da semente concatenada com os binários dos envelopes). Disponível desde o HotPDF v2.33.0.
Exemplo de código
HPDF.Version := pdf20; // Select PDF 2.0
HPDF.CryptKeyLength := aesgcm; // Select AES-256-GCM
HPDF.OwnerPassword := 'password'; // Set owner password (required to change security settings)
HPDF.UserPassword := 'user'; // Set user password (required to open the document)
HPDF.ProtectOptions := [prPrint, prPrint12bit]; // Allow full-quality printing only
HPDF.EncryptMetadata := false; // Keep XMP metadata cleartext
HPDF.ActivateProtection := true; // Enable PDF security
See also: ActivateProtection, OwnerPassword, ProtectOptions, UserPassword
|