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 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
| Function | Description |
|---|---|
DeriveEncryptionKeys | Wykonuje wyprowadzanie kluczy oparte na haśle i zwraca klucz pliku oraz pięć wpisów słownika |
BuildEncryptDictionary | Serializuje klucze i opcje do tekstu słownika /Encrypt |
EncryptStreamPayload | Szyfruje jeden strumień obiektu algorytmem AES-256-CBC przy użyciu klucza pliku |
EncryptDocumentBytes | Pomocnik jednorazowy, który wyprowadza klucze, przepisuje strumienie i wstrzykuje słownik /Encrypt do całej tablicy bajtów PDF |
DecryptAesGcmDocumentBytes | Uwierzytelnia i deszyfruje wyjście AESV4-GCM do jawnych bajtów, które PDFium potrafi załadować |
ValidateEncryptedDocumentMac | Waliduje samodzielny PDF MAC względem oryginalnych zaszyfrowanych bajtów przy użyciu hasła użytkownika lub właściciela |
ReadIncrementalEncryptionContext | Uwierzytelnia łańcuch zaszyfrowanych rewizji i odzyskuje odziedziczony klucz pliku, rewizję, politykę metadanych, odwołanie /Encrypt oraz stan PDF MAC |
ClearIncrementalEncryptionContext | Bezpiecznie czyści odzyskany materiał kluczy szyfrowania przyrostowego |
EncryptIncrementalObjectBody | Szyfruje łańcuchy i strumienie w treści jednego zmienionego obiektu pośredniego w odziedziczonym kontekście zabezpieczeń |
| Type | Description |
|---|---|
TPdfEncryptionRevision | Wyliczenie wybierające rewizję AESV3-CBC erR5 lub erR6 albo rewizję AESV4-GCM z ISO/TS 32003 o numerze erR7 |
TPdfEncryptOptions | Rekord przenoszący hasła, flagi uprawnień, politykę metadanych, rewizję procedury obsługi zabezpieczeń i opcjonalną ochronę integralności PDF MAC |
TPdfEncryptionKeys | Rekord przechowujący klucz pliku, wpisy procedury obsługi zabezpieczeń i opcjonalny 32-bajtowy /KDFSalt |
TPdfIncrementalEncryptionContext | Uwierzytelniony odziedziczony stan zabezpieczeń służący do dopisywania zaszyfrowanych obiektów pośrednich bez zastępowania istniejącego słownika /Encrypt |
TPdfMacValidationStatus | pmvsValid, pmvsNotPresent, pmvsInvalid lub pmvsUnsupported |
TPdfMacValidationResult | Samodzielna walidacja PDF MAC: Status i diagnostyczny MessageText |
DecryptAesGcmDocumentBytes podąża za klasycznymi łańcuchami rewizji /Prev emitowanymi przez przyrostowy pisarz zaszyfrowanych dokumentów i rozwiązuje najnowszą aktywną generację obiektu; natywne ładowanie AESV4 w PDFium i zewnętrzne wejście AESV4 w strumieniach xref nie są dostępne w tym wydaniuPermissions używa układu bitowego z ISO 32000-1 Table 22 (flagi /P)