THotPDF.CryptKeyLength Property

 

THotPDF.CryptKeyLength

THotPDF

 

Вверх  Назад  Далее

Задаёт метод шифрования PDF-файла.

 

type

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

 

Синтаксис Delphi:

property CryptKeyLength: THPDFKeyType;

 

Синтаксис C++:

__property THPDFKeyType CryptKeyLength;

 

Описание

Используйте CryptKeyLength, чтобы выбрать ревизию стандартного security handler и шифр, применяемые при включённом ActivateProtection.

Для AES-шифрования паролем задайте EncryptMetadata в false перед BeginDoc чтобы записать /EncryptMetadata false, оставьте потоки XMP /Metadata в открытом виде и используйте соответствующий вывод ключа AES-128 или AES-256 /Perms флаг метаданных. По умолчанию true ради совместимости.

 

Значение / описание


k40 Стандартный security handler V=1, R=2, RC4 с 40-битным ключом (PDF 1.1+).

k128 Стандартный security handler V=2, R=3, RC4 со 128-битным ключом (PDF 1.4+).

aes128 Стандартный security handler V=4, R=4 с crypt filter StdCF (CFM=AESV2). AES-128 в режиме CBC с padding PKCS#7 и случайным 16-байтовым вектором инициализации согласно ISO 32000-1 7.6.2 / 7.4.4.2 (PDF 1.6+). Начиная с HotPDF v2.4.0 эта опция шифрует строки и потоки настоящей реализацией AES; более ранние сборки писали AES-словарь, но содержимое реально не шифровали.

aes256 Стандартный security handler V=5 с crypt filter StdCF (CFM=AESV3). AES-256 в режиме CBC с padding PKCS#7 и случайным 16-байтовым вектором инициализации согласно Adobe Extension Level 3 / ISO 32000-2 7.6.4 (PDF 1.7+; принимается Acrobat 9 и новее, Foxit, Chrome и просмотрщиками Apple/macOS). Доступно с HotPDF v2.17.0. Выбор aes256 поднимает выходную версию до PDF 1.7, если она ниже, если только не установлен StrictVersionLock — тогда при более низкой версии происходит откат к AES-128 (до v2.760.0 дефолтный вывод PDF 1.6 молча откатывался к AES-128). Ревизия по умолчанию — R=5 с хешированием пароля SHA-256. Установите UseAES256R6 в true, чтобы перейти на R=6 с алгоритмом 2.B «hash dance» из ISO 32000-2 (SHA-256 / SHA-384 / SHA-512 + микшер AES-128); R=6 требуется Acrobat DC и валидаторам PDF/A-4. Доступно с HotPDF v2.22.0.

aesgcm Стандартный security handler V=6, R=7 с crypt filter StdCF (CFM=AESV4). AES-256-GCM использует уникальный 12-байтовый вектор инициализации и 16-байтовый тег аутентификации для каждой шифруемой строки и потока, с пустыми дополнительными аутентифицированными данными, как определено в ISO/TS 32003:2023. Опция требует PDF 2.0 и записывает ISO developer extension уровня 32003. Доступно с HotPDF v2.475.0.

 

Security handler с открытым ключом (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, а получатели на базе сертификатов или key-agreement требуют именно его); aesgcm ограничен стандартным security handler на пароле. Вызывающий должен собрать по одному blob PKCS#7 envelopedData на получателя (Windows CryptoAPI, OpenSSL или pycryptodome) и добавить каждый blob через AddPubKeyRecipient; ключ шифрования файла выводится, как описано в ISO 32000-1 7.6.4.3 (SHA-1 от seed, сконкатенированного с бинарными данными конверта). Доступно с HotPDF v2.33.0.

 

Пример кода

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

 

См. также: ActivateProtection, OwnerPassword, ProtectOptions, UserPassword