PDFium Delphi Component Docs

FPdfEncrypt модуль

Unit: FPdfEncrypt
Виводить ключі шифрування AES-256 і формує ISO 32000-2 AESV3-CBC або ISO/TS 32003 AESV4-GCM рядки, потоки та словники шифрування

Syntax

TPdfEncryptionRevision = (erR5, erR6, erR7);

TPdfEncryptOptions = record
  UserPassword: AnsiString;
  OwnerPassword: AnsiString;
  Permissions: Cardinal;
  EncryptMetadata: Boolean;
  Revision: TPdfEncryptionRevision;
  EnableIntegrityProtection: Boolean;
  class function Default: TPdfEncryptOptions; static;
end;

TPdfEncryptionKeys = record
  FileEncryptionKey: TBytes;
  OEntry: TBytes;
  UEntry: TBytes;
  OEEntry: TBytes;
  UEEntry: TBytes;
  PermsEntry: TBytes;
  KdfSalt: TBytes;
end;

TPdfIncrementalEncryptionContext = record
  FileEncryptionKey: TBytes;
  KdfSalt: TBytes;
  Revision: TPdfEncryptionRevision;
  EncryptMetadata: Boolean;
  EncryptObjectNumber: Integer;
  EncryptGeneration: Integer;
  HasAuthenticationCode: Boolean;
end;

procedure DeriveEncryptionKeys(const Options: TPdfEncryptOptions;
  out Keys: TPdfEncryptionKeys);
function BuildEncryptDictionary(const Keys: TPdfEncryptionKeys;
  const Options: TPdfEncryptOptions): AnsiString;
function EncryptStreamPayload(const FileKey: TBytes;
  const Plain: TBytes): TBytes;
function EncryptDocumentBytes(const PlainPdf: TBytes;
  const Options: TPdfEncryptOptions): TBytes;
function DecryptAesGcmDocumentBytes(const EncryptedPdf: TBytes;
  const Password: AnsiString; out PlainPdf: TBytes;
  out ErrorText: string): Boolean;
function ValidateEncryptedDocumentMac(const EncryptedPdf: TBytes;
  const Password: AnsiString): TPdfMacValidationResult;
function ReadIncrementalEncryptionContext(const EncryptedPdf: TBytes;
  const Password: AnsiString;
  out Context: TPdfIncrementalEncryptionContext;
  out ErrorText: string): Boolean;
procedure ClearIncrementalEncryptionContext(
  var Context: TPdfIncrementalEncryptionContext);
function EncryptIncrementalObjectBody(const PlainBody: TBytes;
  const Context: TPdfIncrementalEncryptionContext;
  out EncryptedBody: TBytes;
  out ErrorText: string): Boolean;

Description

FPdfEncrypt реалізує обробник безпеки PDF AES-256, визначений у розділі 7.6 ISO 32000-2, та розширення AESV4-GCM, визначене ISO/TS 32003. EncryptDocumentBytes перетворює звичайний масив байтів PDF у зашифрований документ з обраною ревізією

DeriveEncryptionKeys виконує виведення ключів на основі пароля, яке створює 32-байтовий ключ шифрування файлу плюс записи словника /O, /U, /OE, /UE і /Perms. BuildEncryptDictionary серіалізує ці записи в текст словника /Encrypt. EncryptStreamPayload застосовує шифрування AES-256-CBC до одного потоку об'єкта за допомогою ключа файлу

Досвідчений користувач, який будує власний конвеєр збереження, може викликати ці три примітиви напряму; код застосунку зазвичай використовує TPdf.SaveAsEncrypted або TPdf.SaveAsEncryptedToStream, які внутрішньо викликають EncryptDocumentBytes

Коли EnableIntegrityProtection увімкнено, записувач формує окремий код автентифікації PDF 2.0 за ISO/TS 32004 з точним /ByteRange, що покриває EOF, /KDFSalt, CMS AuthenticatedData, HKDF-SHA256, AES-256 Key Wrap і HMAC-SHA256

PDFium зараз не відкриває розбір AESV4 через свій публічний ABI. Спершу викличте DecryptAesGcmDocumentBytes і передайте повернуті байти до TPdf.LoadDocument; функція не повертає часткового відкритого тексту після збою пароля, дозволів, PDF MAC, тега рядка чи тега потоку

ReadIncrementalEncryptionContext автентифікує поточний ланцюг зашифрованих ревізій і відновлює успадкований стан безпеки. EncryptIncrementalObjectBody шифрує рядки та корисне навантаження потоку в одному зміненому непрямому об'єкті, зберігаючи винятки метаданих і оновлюючи прямі значення /Length; ClearIncrementalEncryptionContext очищає відновлений ключовий матеріал

Functions

FunctionDescription
DeriveEncryptionKeysВиконує виведення ключів на основі пароля та повертає ключ файлу і п'ять записів словника
BuildEncryptDictionaryСеріалізує ключі та опції в текст словника /Encrypt
EncryptStreamPayloadШифрує один потік об'єкта з AES-256-CBC за допомогою ключа файлу
EncryptDocumentBytesОдноразовий хелпер, який виводить ключі, переписує потоки та впроваджує словник /Encrypt у цілий масив байтів PDF
DecryptAesGcmDocumentBytesАвтентифікує та розшифровує вивід AESV4-GCM у байти відкритого тексту, які може завантажити PDFium
ValidateEncryptedDocumentMacПеревіряє окремий PDF MAC проти початкових зашифрованих байтів за допомогою пароля користувача чи власника
ReadIncrementalEncryptionContextАвтентифікує ланцюг зашифрованих ревізій і відновлює успадкований ключ файлу, ревізію, політику метаданих, посилання /Encrypt та стан PDF MAC
ClearIncrementalEncryptionContextБезпечно очищає відновлений ключовий матеріал інкрементального шифрування
EncryptIncrementalObjectBodyШифрує рядки та потоки в одному зміненому тілі непрямого об'єкта в успадкованому контексті безпеки

Types

TypeDescription
TPdfEncryptionRevisionПерелік, що обирає ревізію AESV3-CBC erR5 чи erR6 або ревізію ISO/TS 32003 AESV4-GCM erR7
TPdfEncryptOptionsЗапис із паролями, прапорцями дозволів, політикою метаданих, ревізією обробника безпеки та необов'язковим захистом цілісності PDF MAC
TPdfEncryptionKeysЗапис із ключем файлу, записами обробника безпеки та необов'язковим 32-байтовим /KDFSalt
TPdfIncrementalEncryptionContextАвтентифікований успадкований стан безпеки для дописування зашифрованих непрямих об'єктів без заміни наявного словника /Encrypt
TPdfMacValidationStatuspmvsValid, pmvsNotPresent, pmvsInvalid або pmvsUnsupported
TPdfMacValidationResultСтатус Status перевірки окремого PDF MAC і діагностичний MessageText

Remarks

See Also

FPdfAes, FPdfSha256, FPdfHmac, FPdfMac, TPdf.SaveAsEncrypted, TPdf.SaveAsEncryptedToStream