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;
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
| Function | Description |
|---|---|
DeriveEncryptionKeys | Menjalankan derivasi kunci berbasis kata sandi dan mengembalikan kunci file beserta lima entri kamusnya |
BuildEncryptDictionary | Menserialisasi kunci dan opsi menjadi teks kamus /Encrypt |
EncryptStreamPayload | Mengenkripsi satu object stream dengan AES-256-CBC memakai kunci file |
EncryptDocumentBytes | Helper sekali-jalan yang menurunkan kunci, menulis ulang stream, dan menyuntikkan kamus /Encrypt ke seluruh array byte PDF |
DecryptAesGcmDocumentBytes | Mengautentikasi dan mendekripsi keluaran AESV4-GCM menjadi byte plaintext yang dapat dimuat PDFium |
ValidateEncryptedDocumentMac | Memvalidasi MAC PDF mandiri terhadap byte terenkripsi semula memakai kata sandi pengguna atau pemilik |
ReadIncrementalEncryptionContext | Mengautentikasi rantai revisi terenkripsi dan memulihkan kunci file warisan, revisi, kebijakan metadata, referensi /Encrypt, serta status MAC PDF |
ClearIncrementalEncryptionContext | Menghapus material kunci enkripsi inkremental yang dipulihkan secara aman |
EncryptIncrementalObjectBody | Mengenkripsi string dan stream dalam satu body objek-tidak-langsung yang berubah di bawah konteks keamanan warisan |
| Type | Description |
|---|---|
TPdfEncryptionRevision | Enumerasi yang memilih revisi AESV3-CBC erR5 atau erR6, atau revisi AESV4-GCM ISO/TS 32003 erR7 |
TPdfEncryptOptions | Record yang membawa kata sandi, flag izin, kebijakan metadata, revisi security handler, dan perlindungan integritas PDF MAC opsional |
TPdfEncryptionKeys | Record yang menampung kunci file, entri security handler, dan /KDFSalt 32 byte opsional |
TPdfIncrementalEncryptionContext | Status keamanan warisan yang terautentikasi, dipakai untuk menyisipkan objek tidak langsung terenkripsi tanpa mengganti kamus /Encrypt yang ada |
TPdfMacValidationStatus | pmvsValid, pmvsNotPresent, pmvsInvalid, atau pmvsUnsupported |
TPdfMacValidationResult | Status validasi MAC PDF mandiri dan MessageText diagnostiknya |
DecryptAesGcmDocumentBytes mengikuti rantai revisi /Prev klasik yang dipancarkan penulis inkremental terenkripsi dan mengresolusi generation objek aktif terbaru; pemuatan AESV4 native PDFium dan input AESV4 xref-stream eksternal tidak tersedia pada rilis iniPermissions memakai tata letak bit ISO 32000-1 Tabel 22 (flag /P)