PDFium Delphi Component Docs

FPdfEncrypt واحد

واحد: FPdfEncrypt
کلیدهای رمزگذاری AES-256 را مشتق می‌کند و رشته‌ها، جریان‌ها و دیکشنری‌های رمزگذاری AESV3-CBC از ISO 32000-2 یا AESV4-GCM از ISO/TS 32003 تولید می‌کند

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 گردانندهٔ امنیتی AES-256 تعریف‌شده در بخش ۷٫۶ از ISO 32000-2 و افزونهٔ AESV4-GCM تعریف‌شده در ISO/TS 32003 را پیاده‌سازی می‌کند. EncryptDocumentBytes یک آرایهٔ بایتی PDF آشکار را با بازنگری منتخب به سندی رمزنگاری‌شده بدل می‌کند

DeriveEncryptionKeys مشتق‌سازی کلید مبتنی بر گذرواژه را اجرا می‌کند که کلید رمزگذاری فایل ۳۲ بایتی به‌علاوهٔ مدخل‌های دیکشنری /O، /U، /OE، /UE و /Perms را تولید می‌کند. BuildEncryptDictionary این مدخل‌ها را به متن دیکشنری /Encrypt سری می‌کند. EncryptStreamPayload رمزگذاری AES-256-CBC را با کلید فایل روی جریان یک شیء اعمال می‌کند

کاربر قدرتمندی که خط لولهٔ ذخیرهٔ سفارشی می‌سازد می‌تواند این سه ابتدایی را مستقیم صدا بزند؛ کد برنامه معمولاً از TPdf.SaveAsEncrypted یا TPdf.SaveAsEncryptedToStream استفاده می‌کند که درونشان EncryptDocumentBytes را صدا می‌زنند

وقتی EnableIntegrityProtection برابر true باشد، نویسنده یک کد احراز هویت مستقل از ISO/TS 32004 مختص PDF 2.0 با /ByteRangeای که دقیقاً EOF را می‌پوشاند، /KDFSalt، CMS AuthenticatedData، HKDF-SHA256، AES-256 Key Wrap و HMAC-SHA256 تولید می‌کند

PDFium در حال حاضر تجزیهٔ AESV4 را از طریق ABI عمومی‌اش در معرض نمی‌گذارد. نخست DecryptAesGcmDocumentBytes را صدا بزنید و بایت‌های برگشتی را به TPdf.LoadDocument بدهید؛ این تابع پس از شکست در گذرواژه، مجوز، PDF MAC، تگ رشته یا تگ جریان، هیچ متن آشکار ناقصی برنمی‌گرداند

ReadIncrementalEncryptionContext زنجیرهٔ بازنگری‌های رمزنگاری‌شدهٔ فعلی را احراز هویت و وضعیت امنیتی به‌ارث‌رسیده را بازیابی می‌کند. EncryptIncrementalObjectBody رشته‌ها و بار جریان را در یک شیء غیرمستقیم تغییرکرده رمزگذاری می‌کند و در عین حال استثناهای فراداده را حفظ و مقادیر مستقیم /Length را به‌روزرسانی می‌کند؛ ClearIncrementalEncryptionContext مواد کلیدی بازیابی‌شده را پاک می‌کند

Functions

FunctionDescription
DeriveEncryptionKeysمشتق‌سازی کلید مبتنی بر گذرواژه را اجرا می‌کند و کلید فایل و پنج مدخل دیکشنری را برمی‌گرداند
BuildEncryptDictionaryکلیدها و گزینه‌ها را به متن دیکشنری /Encrypt سری می‌کند
EncryptStreamPayloadیک جریان شیء را با AES-256-CBC و با کلید فایل رمزگذاری می‌کند
EncryptDocumentBytesکمک‌تابع یک‌مرحله‌ای که کلیدها را مشتق می‌کند، جریان‌ها را بازنویسی می‌کند و دیکشنری /Encrypt را درون یک آرایهٔ بایتی PDF کامل تزریق می‌کند
DecryptAesGcmDocumentBytesخروجی AESV4-GCM را احراز هویت و رمزگشایی می‌کند تا به بایت‌های آشکاری برسد که PDFium می‌تواند بارگذاری کند
ValidateEncryptedDocumentMacیک PDF MAC مستقل را در برابر بایت‌های رمزنگاری‌شدهٔ اصلی با گذرواژهٔ کاربر یا مالک اعتبارسنجی می‌کند
ReadIncrementalEncryptionContextزنجیرهٔ بازنگری‌های رمزنگاری‌شده را احراز هویت می‌کند و کلید فایل به‌ارث‌رسیده، بازنگری، سیاست فراداده، ارجاع /Encrypt و وضعیت PDF MAC را بازیابی می‌کند
ClearIncrementalEncryptionContextمواد کلیدی رمزگذاری افزایشی بازیابی‌شده را به‌صورت امن پاک می‌کند
EncryptIncrementalObjectBodyرشته‌ها و جریان‌های یک بدنهٔ شیء غیرمستقیم تغییرکرده را زیر بافت امنیتی به‌ارث‌رسیده رمزگذاری می‌کند

Types

TypeDescription
TPdfEncryptionRevisionشمارشی که بازنگری AESV3-CBC یعنی erR5 یا erR6 یا بازنگری AESV4-GCM از ISO/TS 32003 یعنی erR7 را برمی‌گزیند
TPdfEncryptOptionsرکوردی حامل گذرواژه‌ها، پرچم‌های مجوز، سیاست فراداده، بازنگری گردانندهٔ امنیتی و حفاظت اختیاری یکپارچگی PDF MAC
TPdfEncryptionKeysرکوردی حامل کلید فایل، مدخل‌های گردانندهٔ امنیتی و /KDFSalt اختیاری ۳۲ بایتی
TPdfIncrementalEncryptionContextوضعیت امنیتی به‌ارث‌رسیدهٔ احراز هویت‌شده که برای افزودن اشیاء غیرمستقیم رمزنگاری‌شده بدون جایگزینی دیکشنری موجود /Encrypt به کار می‌رود
TPdfMacValidationStatuspmvsValid، pmvsNotPresent، pmvsInvalid یا pmvsUnsupported
TPdfMacValidationResultStatus اعتبارسنجی PDF MAC مستقل و MessageText تشخیصی

Remarks

See Also

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