PDFium Delphi Component Docs

FPdfEncrypt unit

Unit: FPdfEncrypt
Menurunkan kunci enkripsi AES-256 dan menghasilkan string, stream, serta kamus enkripsi AESV3-CBC ISO 32000-2 atau AESV4-GCM ISO/TS 32003

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 mengimplementasikan security handler AES-256 PDF yang didefinisikan di ISO 32000-2 bagian 7.6 dan ekstensi AESV4-GCM yang didefinisikan oleh ISO/TS 32003. EncryptDocumentBytes mengubah array byte PDF polos menjadi dokumen terenkripsi memakai revisi yang dipilih

DeriveEncryptionKeys menjalankan derivasi kunci berbasis kata sandi yang menghasilkan kunci enkripsi file 32 byte plus entri kamus /O, /U, /OE, /UE, dan /Perms. BuildEncryptDictionary menserialisasi entri tersebut menjadi teks kamus /Encrypt. EncryptStreamPayload menerapkan enkripsi AES-256-CBC pada satu object stream memakai kunci file

Pengguna mahir yang membangun pipeline simpan kustom dapat memanggil ketiga primitif secara langsung; kode aplikasi biasanya memakai TPdf.SaveAsEncrypted atau TPdf.SaveAsEncryptedToStream, yang memanggil EncryptDocumentBytes secara internal

Ketika EnableIntegrityProtection bernilai true, penulis mengeluarkan kode autentikasi mandiri PDF 2.0 ISO/TS 32004 dengan /ByteRange yang tepat menutupi EOF, /KDFSalt, CMS AuthenticatedData, HKDF-SHA256, AES-256 Key Wrap, dan HMAC-SHA256

PDFium saat ini tidak mengekspos parsing AESV4 melalui ABI publiknya. Panggil DecryptAesGcmDocumentBytes terlebih dahulu lalu teruskan byte yang dikembalikan ke TPdf.LoadDocument; fungsi ini tidak mengembalikan plaintext parsial setelah kegagalan kata sandi, izin, MAC PDF, tag string, atau tag stream

ReadIncrementalEncryptionContext mengautentikasi rantai revisi terenkripsi saat ini dan memulihkan status keamanan warisannya. EncryptIncrementalObjectBody mengenkripsi string dan payload stream dalam satu objek tidak langsung yang berubah sambil mempertahankan pengecualian metadata dan memperbarui nilai /Length langsung; ClearIncrementalEncryptionContext menghapus material kunci yang dipulihkan

Functions

FunctionDescription
DeriveEncryptionKeysMenjalankan derivasi kunci berbasis kata sandi dan mengembalikan kunci file beserta lima entri kamusnya
BuildEncryptDictionaryMenserialisasi kunci dan opsi menjadi teks kamus /Encrypt
EncryptStreamPayloadMengenkripsi satu object stream dengan AES-256-CBC memakai kunci file
EncryptDocumentBytesHelper sekali-jalan yang menurunkan kunci, menulis ulang stream, dan menyuntikkan kamus /Encrypt ke seluruh array byte PDF
DecryptAesGcmDocumentBytesMengautentikasi dan mendekripsi keluaran AESV4-GCM menjadi byte plaintext yang dapat dimuat PDFium
ValidateEncryptedDocumentMacMemvalidasi MAC PDF mandiri terhadap byte terenkripsi semula memakai kata sandi pengguna atau pemilik
ReadIncrementalEncryptionContextMengautentikasi rantai revisi terenkripsi dan memulihkan kunci file warisan, revisi, kebijakan metadata, referensi /Encrypt, serta status MAC PDF
ClearIncrementalEncryptionContextMenghapus material kunci enkripsi inkremental yang dipulihkan secara aman
EncryptIncrementalObjectBodyMengenkripsi string dan stream dalam satu body objek-tidak-langsung yang berubah di bawah konteks keamanan warisan

Types

TypeDescription
TPdfEncryptionRevisionEnumerasi yang memilih revisi AESV3-CBC erR5 atau erR6, atau revisi AESV4-GCM ISO/TS 32003 erR7
TPdfEncryptOptionsRecord yang membawa kata sandi, flag izin, kebijakan metadata, revisi security handler, dan perlindungan integritas PDF MAC opsional
TPdfEncryptionKeysRecord yang menampung kunci file, entri security handler, dan /KDFSalt 32 byte opsional
TPdfIncrementalEncryptionContextStatus keamanan warisan yang terautentikasi, dipakai untuk menyisipkan objek tidak langsung terenkripsi tanpa mengganti kamus /Encrypt yang ada
TPdfMacValidationStatuspmvsValid, pmvsNotPresent, pmvsInvalid, atau pmvsUnsupported
TPdfMacValidationResultStatus validasi MAC PDF mandiri dan MessageText diagnostiknya

Remarks

See Also

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