THotPDF.CryptKeyLength 속성

 

THotPDF.CryptKeyLength

THotPDF

 

Top  Previous  Next

Determines PDF file encryption method.

 

type

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

 

Delphi syntax:

property CryptKeyLength: THPDFKeyType;

 

C++ syntax:

__property THPDFKeyType CryptKeyLength;

 

Description

ActivateProtection이 켜져 있을 때 사용할 표준 보안 핸들러 리비전과 암호를 선택하려면 CryptKeyLength를 사용합니다.

AES 비밀번호 암호화에서 EncryptMetadata를 BeginDoc 전에 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에 따라 PKCS#7 패딩과 16바이트 임의 초기화 벡터를 사용하는 CBC 모드의 AES-128입니다(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에 따라 PKCS#7 패딩과 16바이트 임의 초기화 벡터를 사용하는 CBC 모드의 AES-256입니다(PDF 1.7+, Acrobat 9 이상, Foxit, Chrome, Apple/macOS 뷰어에서 지원). HotPDF v2.17.0부터 사용할 수 있습니다. aes256을 선택하면 출력 버전이 PDF 1.7보다 낮은 경우 PDF 1.7로 올라가며, StrictVersionLock이 설정되어 있으면 낮은 버전에서는 AES-128로 대체됩니다(v2.760.0 이전에는 기본 PDF 1.6 출력이 조용히 AES-128로 대체되었습니다). 기본 리비전은 SHA-256 비밀번호 해싱을 사용하는 R=5입니다. UseAES256R6을 true로 설정하면 ISO 32000-2 알고리즘 2.B "hash dance"(SHA-256 / SHA-384 / SHA-512 + AES-128 믹서)를 사용하는 R=6으로 전환되며, R=6은 Acrobat DC와 PDF/A-4 검증기에서 요구합니다. HotPDF v2.22.0부터 사용할 수 있습니다.

aesgcm              표준 보안 핸들러 V=6, R=7, crypt filter StdCF(CFM=AESV4). AES-256-GCM은 ISO/TS 32003:2023에 정의된 대로, 암호화되는 모든 문자열과 스트림마다 고유한 12바이트 초기화 벡터와 16바이트 인증 태그를 사용하며 추가 인증 데이터(AAD)는 비어 있습니다. 이 옵션은 PDF 2.0이 필요하고 확장 수준 32003의 ISO developer extension을 출력합니다. HotPDF v2.475.0부터 사용할 수 있습니다.

 

Public-Key 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으로 올라가고, 인증서 또는 키 합의 수신자는 PDF 2.0이 필요합니다), aesgcm은 비밀번호 기반 표준 보안 핸들러에서만 사용할 수 있습니다. 호출자는 수신자마다 PKCS#7 envelopedData 블롭을 하나씩(Windows CryptoAPI, OpenSSL, pycryptodome 등으로) 만들어 AddPubKeyRecipient로 각각 추가해야 하며, 파일 암호화 키는 ISO 32000-1 7.6.4.3에 설명된 대로(seed와 엔벨로프 바이너리를 이어 붙인 값의 SHA-1) 도출됩니다. HotPDF v2.33.0부터 사용할 수 있습니다.

 

Code Example

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