PDFium Delphi Component Docs

FPdfEncrypt birimi

Unit: FPdfEncrypt
AES-256 şifreleme anahtarlarını türetir ve ISO 32000-2 AESV3-CBC ya da ISO/TS 32003 AESV4-GCM dizilerini, akışlarını ve şifreleme sözlüklerini üretir

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, 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

Functions

FunctionDescription
DeriveEncryptionKeysParola tabanlı anahtar türetmesini çalıştırır ve dosya anahtarı ile beş sözlük girdisini döndürür
BuildEncryptDictionaryAnahtarları ve seçenekleri /Encrypt sözlüğü metnine serileştirir
EncryptStreamPayloadDosya anahtarını kullanarak tek bir nesne akışını AES-256-CBC ile şifreler
EncryptDocumentBytesAnahtarları türeten, akışları yeniden yazan ve /Encrypt sözlüğünü bütün bir PDF bayt dizisine enjekte eden tek seferlik yardımcı
DecryptAesGcmDocumentBytesAESV4-GCM çıktısının kimliğini doğrular ve PDFium'un yükleyebileceği düz metin baytlarına çözer
ValidateEncryptedDocumentMacBağı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
ClearIncrementalEncryptionContextKurtarılan artımlı şifreleme anahtar malzemesini güvenli biçimde temizler
EncryptIncrementalObjectBodyKalıtımla alınan güvenlik bağlamı altında tek bir değişen dolaylı nesne gövdesindeki dizeleri ve akışları şifreler

Types

TypeDescription
TPdfEncryptionRevisionAESV3-CBC revizyonlarından erR5 ya da erR6 veya ISO/TS 32003 AESV4-GCM revizyonu erR7 seçen sayım (enumeration)
TPdfEncryptOptionsParolaları, 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
TPdfEncryptionKeysDosya anahtarını, güvenlik işleyici girdilerini ve isteğe bağlı 32 baytlık /KDFSalt değerini tutan kayıt
TPdfIncrementalEncryptionContextMevcut /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
TPdfMacValidationStatuspmvsValid, pmvsNotPresent, pmvsInvalid ya da pmvsUnsupported
TPdfMacValidationResultBağımsız PDF MAC doğrulama Status değeri ve tanısal MessageText

Remarks

See Also

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