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 implementerer PDF AES-256-sikkerhedshandleren defineret i ISO 32000-2 afsnit 7.6 og AESV4-GCM-udvidelsen defineret af ISO/TS 32003. EncryptDocumentBytes omdanner et klart PDF-byte-array til et krypteret dokument med den valgte revision
DeriveEncryptionKeys kører den adgangskodebaserede nøglederivering, der producerer den 32-byte file encryption key plus dictionary-indgangene /O, /U, /OE, /UE og /Perms. BuildEncryptDictionary serialiserer disse indgange til /Encrypt-dictionary-teksten. EncryptStreamPayload anvender AES-256-CBC-kryptering på én enkelt objektstream med file key
En avanceret bruger, der bygger en brugerdefineret save-pipeline, kan kalde de tre primitiver direkte; applikationskode bruger normalt TPdf.SaveAsEncrypted eller TPdf.SaveAsEncryptedToStream, som internt kalder EncryptDocumentBytes
Når EnableIntegrityProtection er true, udsender writeren en PDF 2.0 ISO/TS 32004 selvstændig autentikeringskode med en eksakt EOF-dækkende /ByteRange, /KDFSalt, CMS AuthenticatedData, HKDF-SHA256, AES-256 Key Wrap og HMAC-SHA256
PDFium eksponerer i øjeblikket ikke AESV4-parsing gennem sin offentlige ABI. Kald først DecryptAesGcmDocumentBytes og giv de returnerede bytes til TPdf.LoadDocument; funktionen returnerer intet delvist klartekst efter en adgangskode-, tilladelses-, PDF MAC-, string tag- eller stream tag-fejl
ReadIncrementalEncryptionContext autentificerer den aktuelle krypterede revisionskæde og gendanner den nedarvede sikkerhedstilstand. EncryptIncrementalObjectBody krypterer strengene og stream-payloaden i ét ændret indirekte objekt, mens metadata-undtagelser bevares og direkte /Length-værdier opdateres; ClearIncrementalEncryptionContext rydder gendannet nøglemateriale
| Function | Description |
|---|---|
DeriveEncryptionKeys | Kører adgangskodebaseret nøglederivering og returnerer file key og de fem dictionary-indgange |
BuildEncryptDictionary | Serialiserer nøglerne og indstillingerne til /Encrypt-dictionary-teksten |
EncryptStreamPayload | Krypterer én objektstream med AES-256-CBC via file key |
EncryptDocumentBytes | One-shot-hjælper, der afleder nøgler, omskriver streams og indsprøjter /Encrypt-dictionaryen i et helt PDF-byte-array |
DecryptAesGcmDocumentBytes | Autentificerer og dekrypterer AESV4-GCM-output til klartekst-bytes, som PDFium kan indlæse |
ValidateEncryptedDocumentMac | Validerer en selvstændig PDF MAC imod de oprindelige krypterede bytes med en bruger- eller ejeradgangskode |
ReadIncrementalEncryptionContext | Autentificerer en krypteret revisionskæde og gendanner den nedarvede file key, revision, metadatapolitik, /Encrypt-reference og PDF MAC-tilstand |
ClearIncrementalEncryptionContext | Rydder sikkert gendannet inkrementelt krypteringsnøglemateriale |
EncryptIncrementalObjectBody | Krypterer strenge og streams i én ændret indirekte objektkrop under den nedarvede sikkerhedskontekst |
| Type | Description |
|---|---|
TPdfEncryptionRevision | Optælling, der vælger AESV3-CBC-revision erR5 eller erR6, eller ISO/TS 32003 AESV4-GCM-revision erR7 |
TPdfEncryptOptions | Record med adgangskoder, tilladelsesflag, metadatapolitik, security-handler-revision og valgfri PDF MAC-integritetsbeskyttelse |
TPdfEncryptionKeys | Record med file key, security-handler-indgange og valgfri 32-byte /KDFSalt |
TPdfIncrementalEncryptionContext | Autentificeret nedarvet sikkerhedstilstand, der bruges til at føje krypterede indirekte objekter til uden at erstatte den eksisterende /Encrypt-dictionary |
TPdfMacValidationStatus | pmvsValid, pmvsNotPresent, pmvsInvalid eller pmvsUnsupported |
TPdfMacValidationResult | Selvstændig PDF MAC-validering Status og diagnostisk MessageText |
DecryptAesGcmDocumentBytes følger klassiske /Prev-revisionskæder udsendt af den krypterede inkrementelle writer og opløser den nyeste aktive objektgeneration; native PDFium AESV4-indlæsning og ekstern xref-stream AESV4-input er ikke tilgængelige i denne udgivelsePermissions bruger bitlayoutet fra ISO 32000-1 Table 22 (/P-flag)