THotPDF.CryptKeyLength Property

 

THotPDF.CryptKeyLength

THotPDF

 

顶部  上一页  下一页

Determines PDF file encryption method.

 

type

THPDFKeyType = ( k40,  k128,  aes128,  aes256 );

 

Delphi 语法:

property CryptKeyLength: THPDFKeyType;

 

C++ 语法:

__property THPDFKeyType CryptKeyLength;

 

说明

用 CryptKeyLength 选择启用 ActivateProtection 时使用的标准安全处理器版本和密码算法。

AES 口令加密时,在 BeginDoc 之前把 EncryptMetadata 设为 false,即可写出 /EncryptMetadata false、让 XMP /Metadata 流保持明文,并使用配套的 AES-128 密钥派生或 AES-256 /Perms 元数据标志。为兼容性考虑,默认值为 true。

 

Value                Meaning


k40                        标准安全处理程序 V=1、R=2,使用 40 位密钥的 RC4(PDF 1.1+)

k128                        标准安全处理程序 V=2、R=3,使用 128 位密钥的 RC4(PDF 1.4+)

aes128                  标准安全处理程序 V=4、R=4,crypt filter 为 StdCF(CFM=AESV2)。按 ISO 32000-1 7.6.2 / 7.4.4.2,使用 CBC 模式的 AES-128、PKCS#7 填充,并为每次加密使用 16 字节随机初始化向量(PDF 1.6+)。自 HotPDF v2.4.0 起,此选项使用真正的 AES 实现来加密字符串和流;更早的版本只会输出 AES 字典,并没有真正加密内容

aes256                  标准安全处理程序 V=5,crypt filter 为 StdCF(CFM=AESV3)。按 Adobe Extension Level 3 / ISO 32000-2 7.6.4,使用 CBC 模式的 AES-256、PKCS#7 填充,并为每次加密使用 16 字节随机初始化向量(PDF 1.7+,Acrobat 9 及更高版本、Foxit、Chrome 以及 Apple/macOS 的 Viewer 均可打开)。自 HotPDF v2.17.0 起提供。选择 aes256 时,如果输出版本低于 PDF 1.7,会将其提升到 PDF 1.7;若设置了 StrictVersionLock,则版本较低时会回退到 AES-128(v2.760.0 之前,默认的 PDF 1.6 输出会静默回退到 AES-128)。默认修订版为 R=5,使用 SHA-256 密码哈希。将 UseAES256R6 设为 true 可切换到 R=6,采用 ISO 32000-2 算法 2.B 的 "hash dance"(SHA-256 / SHA-384 / SHA-512 + AES-128 混合器);Acrobat DC 和 PDF/A-4 验证器要求使用 R=6。自 HotPDF v2.22.0 起提供

aesgcm              标准安全处理器 V=6、R=7,crypt filter 为 StdCF(CFM=AESV4)。按 ISO/TS 32003:2023 的定义,AES-256-GCM 为每条加密字符串和流使用唯一的 12 字节初始化向量和 16 字节认证标签,附加认证数据为空。该选项要求 PDF 2.0,并以扩展级别 32003 写出 ISO 开发者扩展。自 HotPDF v2.475.0 起可用。

 

公钥安全处理器(ISO 32000-1 7.6.4、ISO 32000-2 7.6.5)

基于证书的加密(一份文档、多个收件人)请调用 EnablePubKeyEncryption(seed, KeyType, EncryptMetadata),而不是设置 UserPassword / OwnerPassword。公钥加密支持 k40、k128、aes128 和 aes256(aes256 会把输出版本提升到 PDF 2.0,证书或密钥协商类收件人必须用它);aesgcm 仅限基于密码的 Standard 安全处理器。调用方必须为每个收件人构建一个 PKCS#7 envelopedData 块(Windows CryptoAPI、OpenSSL 或 pycryptodome),并通过 AddPubKeyRecipient 逐个附加;文件加密密钥按算法 9 派生(seed 与信封二进制拼接后的 SHA-1)。自 HotPDF v2.33.0 起可用。

 

代码示例

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.ActivateProtection := true;           // Enable PDF security

 

另请参阅: ActivateProtection, OwnerPassword, ProtectOptions, UserPassword