PDFium Component Docs

Unidad FPdfEncrypt

Unidad: FPdfEncrypt
Deriva claves de cifrado AES-256 y emite cadenas, flujos y diccionarios de cifrado AESV3-CBC de ISO 32000-2 o AESV4-GCM de 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 implementa el controlador de seguridad AES-256 de PDF definido en la sección 7.6 de ISO 32000-2 y la extensión AESV4-GCM definida por ISO/TS 32003. EncryptDocumentBytes convierte un arreglo de bytes PDF en texto plano en un documento cifrado usando la revisión seleccionada

DeriveEncryptionKeys ejecuta la derivación de claves basada en contraseña que produce la clave de cifrado de archivo de 32 bytes más las entradas de diccionario /O, /U, /OE, /UE y /Perms. BuildEncryptDictionary serializa esas entradas en el texto del diccionario /Encrypt. EncryptStreamPayload aplica cifrado AES-256-CBC a un único flujo de objeto usando la clave de archivo

Un usuario avanzado que construya una canalización de guardado personalizada puede llamar directamente a las tres primitivas; el código de aplicación normalmente usa TPdf.SaveAsEncrypted o TPdf.SaveAsEncryptedToStream, que llaman a EncryptDocumentBytes internamente

Cuando EnableIntegrityProtection es true, el escritor emite un código de autenticación independiente de ISO/TS 32004 para PDF 2.0 con un /ByteRange exacto que cubre el EOF, /KDFSalt, CMS AuthenticatedData, HKDF-SHA256, AES-256 Key Wrap y HMAC-SHA256

PDFium actualmente no expone el análisis de AESV4 a través de su ABI pública. Llame primero a DecryptAesGcmDocumentBytes y pase los bytes devueltos a TPdf.LoadDocument; la función no devuelve texto plano parcial después de un fallo de contraseña, permiso, PDF MAC, etiqueta de cadena o etiqueta de flujo

ReadIncrementalEncryptionContext autentica la cadena de revisión cifrada actual y recupera el estado de seguridad heredado. EncryptIncrementalObjectBody cifra las cadenas y la carga útil del flujo en un objeto indirecto cambiado, preservando las exclusiones de metadatos y actualizando los valores /Length directos; ClearIncrementalEncryptionContext borra el material de claves recuperado

Functions

FunciónDescripción
DeriveEncryptionKeysEjecuta la derivación de claves basada en contraseña y devuelve la clave de archivo y las cinco entradas de diccionario
BuildEncryptDictionarySerializa las claves y las opciones en el texto del diccionario /Encrypt
EncryptStreamPayloadCifra un flujo de objeto con AES-256-CBC usando la clave de archivo
EncryptDocumentBytesAuxiliar de una sola pasada que deriva las claves, reescribe los flujos e inyecta el diccionario /Encrypt en un arreglo de bytes de un PDF completo
DecryptAesGcmDocumentBytesAutentica y descifra la salida AESV4-GCM en bytes de texto plano que PDFium puede cargar
ValidateEncryptedDocumentMacValida un PDF MAC independiente contra los bytes cifrados originales usando una contraseña de usuario o de propietario
ReadIncrementalEncryptionContextAutentica una cadena de revisión cifrada y recupera la clave de archivo heredada, la revisión, la política de metadatos, la referencia /Encrypt y el estado del PDF MAC
ClearIncrementalEncryptionContextBorra de forma segura el material de claves de cifrado incremental recuperado
EncryptIncrementalObjectBodyCifra las cadenas y los flujos en el cuerpo de un objeto indirecto cambiado bajo el contexto de seguridad heredado

Types

TipoDescripción
TPdfEncryptionRevisionEnumeración que selecciona la revisión AESV3-CBC erR5 o erR6, o la revisión AESV4-GCM de ISO/TS 32003 erR7
TPdfEncryptOptionsRegistro que lleva contraseñas, indicadores de permisos, política de metadatos, revisión del controlador de seguridad y protección de integridad PDF MAC opcional
TPdfEncryptionKeysRegistro que contiene la clave de archivo, las entradas del controlador de seguridad y el /KDFSalt de 32 bytes opcional
TPdfIncrementalEncryptionContextEstado de seguridad heredado autenticado, usado para anexar objetos indirectos cifrados sin reemplazar el diccionario /Encrypt existente
TPdfMacValidationStatuspmvsValid, pmvsNotPresent, pmvsInvalid o pmvsUnsupported
TPdfMacValidationResultStatus de la validación independiente del PDF MAC y MessageText de diagnóstico

Remarks

See Also

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