PDFium Component Docs

FPdfEncrypt Moduł

Unit: FPdfEncrypt
Wyprowadza klucze szyfrowania AES-256 i emituje łańcuchy AESV3-CBC z ISO 32000-2 albo AESV4-GCM z ISO/TS 32003, strumienie oraz słowniki szyfrowania

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 implementuje procedurę obsługi zabezpieczeń PDF AES-256 zdefiniowaną w sekcji 7.6 ISO 32000-2 oraz rozszerzenie AESV4-GCM zdefiniowane przez ISO/TS 32003. EncryptDocumentBytes zamienia jawną tablicę bajtów PDF w zaszyfrowany dokument przy użyciu wybranej rewizji

DeriveEncryptionKeys wykonuje wyprowadzanie kluczy oparte na haśle, produkujące 32-bajtowy klucz szyfrowania pliku plus wpisy słownika /O, /U, /OE, /UE i /Perms. BuildEncryptDictionary serializuje te wpisy do tekstu słownika /Encrypt. EncryptStreamPayload stosuje szyfrowanie AES-256-CBC do pojedynczego strumienia obiektu przy użyciu klucza pliku

Zaawansowany użytkownik budujący własny potok zapisu może wywoływać te trzy prymitywy bezpośrednio; kod aplikacji normalnie używa TPdf.SaveAsEncrypted lub TPdf.SaveAsEncryptedToStream, które wewnętrznie wywołują EncryptDocumentBytes

Gdy EnableIntegrityProtection ma wartość true, pisarz emituje samodzielny kod uwierzytelniający PDF 2.0 z ISO/TS 32004 z dokładnie obejmującym EOF /ByteRange, /KDFSalt, CMS AuthenticatedData, HKDF-SHA256, AES-256 Key Wrap i HMAC-SHA256

PDFium nie udostępnia obecnie parsowania AESV4 przez swoje publiczne ABI. Najpierw wywołaj DecryptAesGcmDocumentBytes i przekaż zwrócone bajty do TPdf.LoadDocument; funkcja nie zwraca żadnej częściowej treści jawnej po niepowodzeniu hasła, uprawnień, PDF MAC, tagu łańcucha ani tagu strumienia

ReadIncrementalEncryptionContext uwierzytelnia bieżący łańcuch zaszyfrowanych rewizji i odzyskuje odziedziczony stan zabezpieczeń. EncryptIncrementalObjectBody szyfruje łańcuchy i ładunek strumienia w jednym zmienionym obiekcie pośrednim, zachowując wyłączenia metadanych i aktualizując bezpośrednie wartości /Length; ClearIncrementalEncryptionContext czyści odzyskany materiał kluczy

Functions

FunctionDescription
DeriveEncryptionKeysWykonuje wyprowadzanie kluczy oparte na haśle i zwraca klucz pliku oraz pięć wpisów słownika
BuildEncryptDictionarySerializuje klucze i opcje do tekstu słownika /Encrypt
EncryptStreamPayloadSzyfruje jeden strumień obiektu algorytmem AES-256-CBC przy użyciu klucza pliku
EncryptDocumentBytesPomocnik jednorazowy, który wyprowadza klucze, przepisuje strumienie i wstrzykuje słownik /Encrypt do całej tablicy bajtów PDF
DecryptAesGcmDocumentBytesUwierzytelnia i deszyfruje wyjście AESV4-GCM do jawnych bajtów, które PDFium potrafi załadować
ValidateEncryptedDocumentMacWaliduje samodzielny PDF MAC względem oryginalnych zaszyfrowanych bajtów przy użyciu hasła użytkownika lub właściciela
ReadIncrementalEncryptionContextUwierzytelnia łańcuch zaszyfrowanych rewizji i odzyskuje odziedziczony klucz pliku, rewizję, politykę metadanych, odwołanie /Encrypt oraz stan PDF MAC
ClearIncrementalEncryptionContextBezpiecznie czyści odzyskany materiał kluczy szyfrowania przyrostowego
EncryptIncrementalObjectBodySzyfruje łańcuchy i strumienie w treści jednego zmienionego obiektu pośredniego w odziedziczonym kontekście zabezpieczeń

Types

TypeDescription
TPdfEncryptionRevisionWyliczenie wybierające rewizję AESV3-CBC erR5 lub erR6 albo rewizję AESV4-GCM z ISO/TS 32003 o numerze erR7
TPdfEncryptOptionsRekord przenoszący hasła, flagi uprawnień, politykę metadanych, rewizję procedury obsługi zabezpieczeń i opcjonalną ochronę integralności PDF MAC
TPdfEncryptionKeysRekord przechowujący klucz pliku, wpisy procedury obsługi zabezpieczeń i opcjonalny 32-bajtowy /KDFSalt
TPdfIncrementalEncryptionContextUwierzytelniony odziedziczony stan zabezpieczeń służący do dopisywania zaszyfrowanych obiektów pośrednich bez zastępowania istniejącego słownika /Encrypt
TPdfMacValidationStatuspmvsValid, pmvsNotPresent, pmvsInvalid lub pmvsUnsupported
TPdfMacValidationResultSamodzielna walidacja PDF MAC: Status i diagnostyczny MessageText

Remarks

See Also

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