PDFium Delphi Component Docs

FPdfEncrypt enota

Unit: FPdfEncrypt
Izpelje šifrirne ključe AES-256 in izda nize, tokove ter šifrirne slovarje po ISO 32000-2 AESV3-CBC ali 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 implementira varnostni obravnavnik PDF AES-256, opredeljen v oddelku 7.6 ISO 32000-2, in razširitev AESV4-GCM, opredeljeno v ISO/TS 32003. EncryptDocumentBytes spremeni nešifrirano bajtno polje PDF v šifriran dokument z izbrano revizijo

DeriveEncryptionKeys izvede izpeljavo ključev iz gesel, ki izda 32-bajtni ključ za šifriranje datoteke plus slovarske vnose /O, /U, /OE, /UE in /Perms. BuildEncryptDictionary serializira te vnose v besedilo slovarja /Encrypt. EncryptStreamPayload uveljavi šifriranje AES-256-CBC na enem toku objekta z uporabo ključa datoteke

Napreden uporabnik, ki gradi shranjevalni cevovod po meri, lahko tri primitivne pokliče neposredno; aplikacijska koda običajno uporablja TPdf.SaveAsEncrypted ali TPdf.SaveAsEncryptedToStream, ki interno kličejo EncryptDocumentBytes

Kadar je EnableIntegrityProtection resnična, pisalnik izda samostojno overjanje po ISO/TS 32004 za PDF 2.0 z natančnim /ByteRange, ki pokriva EOF, ter s /KDFSalt, CMS AuthenticatedData, HKDF-SHA256, AES-256 Key Wrap in HMAC-SHA256

PDFium razčlenjanja AESV4 trenutno ne izpostavlja prek svojega javnega ABI. Najprej pokličite DecryptAesGcmDocumentBytes in vrnjene bajte posredujte TPdf.LoadDocument; funkcija po napaki gesla, dovoljenja, PDF MAC, oznake niza ali oznake toka ne vrne nobenega delnega odprtega besedila

ReadIncrementalEncryptionContext overi trenutno verigo šifriranih revizij in obnovi podedovano varnostno stanje. EncryptIncrementalObjectBody šifrira nize in vsebino toka v enem spremenjenem posrednem objektu, pri čemer ohrani izjeme metapodatkov in posodobi neposredne vrednosti /Length; ClearIncrementalEncryptionContext počisti obnovljeno ključno gradivo

Functions

FunctionDescription
DeriveEncryptionKeysIzvede izpeljavo ključev iz gesel in vrne ključ datoteke ter pet slovarskih vnosov
BuildEncryptDictionaryKljuče in možnosti serializira v besedilo slovarja /Encrypt
EncryptStreamPayloadŠifrira en tok objekta z AES-256-CBC z uporabo ključa datoteke
EncryptDocumentBytesPomočnik za en sam klic, ki izpelje ključe, prepise tokove in vstavi slovar /Encrypt v celotno bajtno polje PDF
DecryptAesGcmDocumentBytesOveri in dešifrira izhod AESV4-GCM v bajte odprtega besedila, ki jih lahko naloži PDFium
ValidateEncryptedDocumentMacPreveri samostojni PDF MAC proti izvirnim šifriranim bajtom z uporabniškim ali lastniškim geslom
ReadIncrementalEncryptionContextOveri šifrirano verigo revizij in obnovi podedovani ključ datoteke, revizijo, pravilnik metapodatkov, sklic /Encrypt in stanje PDF MAC
ClearIncrementalEncryptionContextVarno počisti obnovljeno ključno gradivo prirastkovnega šifriranja
EncryptIncrementalObjectBodyŠifrira nize in tokove v telesu enega spremenjenega posrednega objekta v podedovanem varnostnem kontekstu

Types

TypeDescription
TPdfEncryptionRevisionOštevilčenje, ki izbere revizijo AESV3-CBC erR5 ali erR6 ali revizijo ISO/TS 32003 AESV4-GCM erR7
TPdfEncryptOptionsZapis, ki nosi gesla, zastavice dovoljenj, pravilnik metapodatkov, revizijo varnostnega obravnavnika in neobvezno zaščito integritete PDF MAC
TPdfEncryptionKeysZapis, ki hrani ključ datoteke, vnose varnostnega obravnavnika in neobvezni 32-bajtni /KDFSalt
TPdfIncrementalEncryptionContextOverjeno podedovano varnostno stanje, uporabljeno za pripetje šifriranih posrednih objektov, brez zamenjave obstoječega slovarja /Encrypt
TPdfMacValidationStatuspmvsValid, pmvsNotPresent, pmvsInvalid ali pmvsUnsupported
TPdfMacValidationResultStatus validacije samostojnega PDF MAC in diagnostično MessageText

Remarks

See Also

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