PDFium Component Docs

FPdfEncrypt-enhet

Unit: FPdfEncrypt
Avleder AES-256-krypteringsnøkler og produserer ISO 32000-2 AESV3-CBC- eller ISO/TS 32003 AESV4-GCM-strenger, strømmer og krypteringsordbøker

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-sikkerhetshandleren definert i ISO 32000-2 avsnitt 7.6 og AESV4-GCM-utvidelsen definert av ISO/TS 32003. EncryptDocumentBytes gjør en klartekst PDF byte-array om til et kryptert dokument med den valgte revisjonen

DeriveEncryptionKeys kjører den passordbaserte nøkkelavledingen som produserer den 32 byte store filkrypteringsnøkkelen pluss ordbokoppføringene /O, /U, /OE, /UE og /Perms. BuildEncryptDictionary serialiserer disse oppføringene til /Encrypt-ordbokteksten. EncryptStreamPayload anvender AES-256-CBC-kryptering på én enkelt objektstrøm med filnøkkelen

En avansert bruker som bygger en egen lagringspipeline kan kalle de tre primitivene direkte; applikasjonskode bruker normalt TPdf.SaveAsEncrypted eller TPdf.SaveAsEncryptedToStream, som kaller EncryptDocumentBytes internt

Når EnableIntegrityProtection er true, sender skriveren ut en frittstående PDF 2.0 ISO/TS 32004 autentiseringskode med en eksakt EOF-dekkende /ByteRange, /KDFSalt, CMS AuthenticatedData, HKDF-SHA256, AES-256 Key Wrap og HMAC-SHA256

PDFium eksponerer foreløpig ikke AESV4-parsing gjennom sitt offentlige ABI. Kall DecryptAesGcmDocumentBytes først og send de returnerte bytene til TPdf.LoadDocument; funksjonen returnerer ingen delvis klartekst etter en passord-, tillatelses-, PDF MAC-, strengtag- eller strømtag-feil

ReadIncrementalEncryptionContext autentiserer den gjeldende kjeden av krypterte revisjoner og gjenoppretter den arvede sikkerhetstilstanden. EncryptIncrementalObjectBody krypterer strengene og strømnyttelasten i ett endret indirekte objekt, samtidig som metadata-ekskluseringer bevares og direkte /Length-verdier oppdateres; ClearIncrementalEncryptionContext tømmer gjenopprettet nøkkelmateriale

Functions

FunctionDescription
DeriveEncryptionKeysKjører passordbasert nøkkelavledning og returnerer filnøkkelen og de fem ordbokoppføringene
BuildEncryptDictionarySerialiserer nøklene og options til /Encrypt-ordbokteksten
EncryptStreamPayloadKrypterer én objektstrøm med AES-256-CBC ved hjelp av filnøkkelen
EncryptDocumentBytesÉn-gangs-hjelper som avleder nøkler, omskriver strømmer og innplanter /Encrypt-ordboken i en hel PDF byte-array
DecryptAesGcmDocumentBytesAutentiserer og dekrypterer AESV4-GCM-utdata til klartekstbytes som PDFium kan laste
ValidateEncryptedDocumentMacValiderer en frittstående PDF MAC mot de opprinnelige krypterte bytene med et bruker- eller eierpassord
ReadIncrementalEncryptionContextAutentiserer en kryptert revisjonskjede og gjenoppretter den arvede filnøkkelen, revisjonen, metadatapolicyen, /Encrypt-referansen og PDF MAC-tilstanden
ClearIncrementalEncryptionContextTømmer gjenopprettet inkrementelt krypteringsnøkkelmateriale på en sikker måte
EncryptIncrementalObjectBodyKrypterer strenger og strømmer i ett endret indirekte objektlegeme under den arvede sikkerhetskonteksten

Types

TypeDescription
TPdfEncryptionRevisionEnumerasjon som velger AESV3-CBC-revisjon erR5 eller erR6, eller ISO/TS 32003 AESV4-GCM-revisjon erR7
TPdfEncryptOptionsRecord som bærer passord, tillatelsesflagg, metadatapolicy, sikkerhetshandler-revisjon og valgfri PDF MAC-integritetsbeskyttelse
TPdfEncryptionKeysRecord som holder filnøkkelen, sikkerhetshandler-oppføringene og valgfri 32-byte /KDFSalt
TPdfIncrementalEncryptionContextAutentisert arvet sikkerhetstilstand brukt til å legge til krypterte indirekte objekter uten å erstatte den eksisterende /Encrypt-ordboken
TPdfMacValidationStatuspmvsValid, pmvsNotPresent, pmvsInvalid eller pmvsUnsupported
TPdfMacValidationResultFrittstående PDF MAC-validering Status og diagnostisk MessageText

Remarks

See Also

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