PDFium Delphi Component Docs

FPdfEncrypt enhed

Enhed: FPdfEncrypt
Afleder AES-256-krypteringsnøgler og udsender ISO 32000-2 AESV3-CBC- eller ISO/TS 32003 AESV4-GCM-strenge, streams og krypteringsdictionaries

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 implementerer PDF AES-256-sikkerhedshandleren defineret i ISO 32000-2 afsnit 7.6 og AESV4-GCM-udvidelsen defineret af ISO/TS 32003. EncryptDocumentBytes omdanner et klart PDF-byte-array til et krypteret dokument med den valgte revision

DeriveEncryptionKeys kører den adgangskodebaserede nøglederivering, der producerer den 32-byte file encryption key plus dictionary-indgangene /O, /U, /OE, /UE og /Perms. BuildEncryptDictionary serialiserer disse indgange til /Encrypt-dictionary-teksten. EncryptStreamPayload anvender AES-256-CBC-kryptering på én enkelt objektstream med file key

En avanceret bruger, der bygger en brugerdefineret save-pipeline, kan kalde de tre primitiver direkte; applikationskode bruger normalt TPdf.SaveAsEncrypted eller TPdf.SaveAsEncryptedToStream, som internt kalder EncryptDocumentBytes

Når EnableIntegrityProtection er true, udsender writeren en PDF 2.0 ISO/TS 32004 selvstændig autentikeringskode med en eksakt EOF-dækkende /ByteRange, /KDFSalt, CMS AuthenticatedData, HKDF-SHA256, AES-256 Key Wrap og HMAC-SHA256

PDFium eksponerer i øjeblikket ikke AESV4-parsing gennem sin offentlige ABI. Kald først DecryptAesGcmDocumentBytes og giv de returnerede bytes til TPdf.LoadDocument; funktionen returnerer intet delvist klartekst efter en adgangskode-, tilladelses-, PDF MAC-, string tag- eller stream tag-fejl

ReadIncrementalEncryptionContext autentificerer den aktuelle krypterede revisionskæde og gendanner den nedarvede sikkerhedstilstand. EncryptIncrementalObjectBody krypterer strengene og stream-payloaden i ét ændret indirekte objekt, mens metadata-undtagelser bevares og direkte /Length-værdier opdateres; ClearIncrementalEncryptionContext rydder gendannet nøglemateriale

Functions

FunctionDescription
DeriveEncryptionKeysKører adgangskodebaseret nøglederivering og returnerer file key og de fem dictionary-indgange
BuildEncryptDictionarySerialiserer nøglerne og indstillingerne til /Encrypt-dictionary-teksten
EncryptStreamPayloadKrypterer én objektstream med AES-256-CBC via file key
EncryptDocumentBytesOne-shot-hjælper, der afleder nøgler, omskriver streams og indsprøjter /Encrypt-dictionaryen i et helt PDF-byte-array
DecryptAesGcmDocumentBytesAutentificerer og dekrypterer AESV4-GCM-output til klartekst-bytes, som PDFium kan indlæse
ValidateEncryptedDocumentMacValiderer en selvstændig PDF MAC imod de oprindelige krypterede bytes med en bruger- eller ejeradgangskode
ReadIncrementalEncryptionContextAutentificerer en krypteret revisionskæde og gendanner den nedarvede file key, revision, metadatapolitik, /Encrypt-reference og PDF MAC-tilstand
ClearIncrementalEncryptionContextRydder sikkert gendannet inkrementelt krypteringsnøglemateriale
EncryptIncrementalObjectBodyKrypterer strenge og streams i én ændret indirekte objektkrop under den nedarvede sikkerhedskontekst

Types

TypeDescription
TPdfEncryptionRevisionOptælling, der vælger AESV3-CBC-revision erR5 eller erR6, eller ISO/TS 32003 AESV4-GCM-revision erR7
TPdfEncryptOptionsRecord med adgangskoder, tilladelsesflag, metadatapolitik, security-handler-revision og valgfri PDF MAC-integritetsbeskyttelse
TPdfEncryptionKeysRecord med file key, security-handler-indgange og valgfri 32-byte /KDFSalt
TPdfIncrementalEncryptionContextAutentificeret nedarvet sikkerhedstilstand, der bruges til at føje krypterede indirekte objekter til uden at erstatte den eksisterende /Encrypt-dictionary
TPdfMacValidationStatuspmvsValid, pmvsNotPresent, pmvsInvalid eller pmvsUnsupported
TPdfMacValidationResultSelvstændig PDF MAC-validering Status og diagnostisk MessageText

Remarks

See Also

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