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, ISO 32000-2 bölüm 7.6'da tanımlanan PDF AES-256 güvenlik işleyicisini ve ISO/TS 32003'ün tanımladığı AESV4-GCM uzantısını uygular. EncryptDocumentBytes, düz bir PDF bayt dizisini seçilen revizyonu kullanarak şifreli bir belgeye dönüştürür
DeriveEncryptionKeys, 32 baytlık dosya şifreleme anahtarını ve /O, /U, /OE, /UE ile /Perms sözlük girdilerini üreten parola tabanlı anahtar türetmesini çalıştırır. BuildEncryptDictionary bu girdileri /Encrypt sözlüğü metnine serileştirir. EncryptStreamPayload, dosya anahtarını kullanarak tek bir nesne akışına AES-256-CBC şifrelemesini uygular
Özel bir kaydetme hattı kuran ileri düzey bir kullanıcı üç ilkeleryi doğrudan çağırabilir; uygulama kodu normalde TPdf.SaveAsEncrypted ya da TPdf.SaveAsEncryptedToStream kullanır ve bunlar EncryptDocumentBytes çağırır
EnableIntegrityProtection true olduğunda yazıcı, EOF'nun tamamını kapsayan bir /ByteRange, /KDFSalt, CMS AuthenticatedData, HKDF-SHA256, AES-256 Key Wrap ve HMAC-SHA256 ile PDF 2.0 ISO/TS 32004 bağımsız kimlik doğrulama kodunu üretir
PDFium, AESV4 ayrıştırmayı şu anda public ABI üzerinden açığa çıkarmıyor. Önce DecryptAesGcmDocumentBytes çağırın ve döndürülen baytları TPdf.LoadDocument işlevine geçirin; işlev, parola, izin, PDF MAC, dize tag ya da akış tag hatasından sonra hiçbir kısmi düz metin döndürmez
ReadIncrementalEncryptionContext, güncel şifreli revizyon zincirini doğrular ve kalıtımla alınan güvenlik durumunu kurtarır. EncryptIncrementalObjectBody, üst veri istisnalarını koruyarak ve doğrudan /Length değerlerini güncelleyerek tek bir değişen dolaylı nesnedeki dizeleri ve akış yükünü şifreler; ClearIncrementalEncryptionContext kurtarılan anahtar malzemesini temizler
| Function | Description |
|---|---|
DeriveEncryptionKeys | Parola tabanlı anahtar türetmesini çalıştırır ve dosya anahtarı ile beş sözlük girdisini döndürür |
BuildEncryptDictionary | Anahtarları ve seçenekleri /Encrypt sözlüğü metnine serileştirir |
EncryptStreamPayload | Dosya anahtarını kullanarak tek bir nesne akışını AES-256-CBC ile şifreler |
EncryptDocumentBytes | Anahtarları türeten, akışları yeniden yazan ve /Encrypt sözlüğünü bütün bir PDF bayt dizisine enjekte eden tek seferlik yardımcı |
DecryptAesGcmDocumentBytes | AESV4-GCM çıktısının kimliğini doğrular ve PDFium'un yükleyebileceği düz metin baytlarına çözer |
ValidateEncryptedDocumentMac | Bağımsız PDF MAC'i, kullanıcı ya da sahip parolasını kullanarak özgün şifreli baytlara karşı doğrular |
ReadIncrementalEncryptionContext | Şifreli bir revizyon zincirinin kimliğini doğrular ve kalıtımla alınan dosya anahtarını, revizyonu, üst veri ilkesini, /Encrypt başvurusunu ve PDF MAC durumunu kurtarır |
ClearIncrementalEncryptionContext | Kurtarılan artımlı şifreleme anahtar malzemesini güvenli biçimde temizler |
EncryptIncrementalObjectBody | Kalıtımla alınan güvenlik bağlamı altında tek bir değişen dolaylı nesne gövdesindeki dizeleri ve akışları şifreler |
| Type | Description |
|---|---|
TPdfEncryptionRevision | AESV3-CBC revizyonlarından erR5 ya da erR6 veya ISO/TS 32003 AESV4-GCM revizyonu erR7 seçen sayım (enumeration) |
TPdfEncryptOptions | Parolaları, izin bayraklarını, üst veri ilkesini, güvenlik işleyici revizyonunu ve isteğe bağlı PDF MAC bütünlük korumasını taşıyan kayıt |
TPdfEncryptionKeys | Dosya anahtarını, güvenlik işleyici girdilerini ve isteğe bağlı 32 baytlık /KDFSalt değerini tutan kayıt |
TPdfIncrementalEncryptionContext | Mevcut /Encrypt sözlüğünü değiştirmeden şifreli dolaylı nesneler eklemek için kullanılan, kimliği doğulanmış kalıtımlı güvenlik durumu |
TPdfMacValidationStatus | pmvsValid, pmvsNotPresent, pmvsInvalid ya da pmvsUnsupported |
TPdfMacValidationResult | Bağımsız PDF MAC doğrulama Status değeri ve tanısal MessageText |
DecryptAesGcmDocumentBytes, şifreli artımlı yazıcının ürettiği klasik /Prev revizyon zincirlerini izler ve en yeni etkin nesne üretimini çözer; yerel PDFium AESV4 yüklemesi ve harici xref-stream AESV4 girdisi bu sürümde mevcut değildirPermissions, ISO 32000-1 Table 22 bit yerleşimini (/P bayrakları) kullanır