PDFium Delphi Component Docs

Unidad FPdfEncrypt

Unidad: FPdfEncrypt
Deriva claves de cifrado AES-256 y emite cadenas, flujos y diccionarios de cifrado ISO 32000-2 AESV3-CBC o ISO/TS 32003 AESV4-GCM

Sintaxis

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;

Descripción

FPdfEncrypt implementa el manejador 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 una matriz de bytes PDF en claro 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 el cifrado AES-256-CBC a un único flujo de objeto usando la clave de archivo

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

Cuando EnableIntegrityProtection es true, el escritor emite un código de autenticación independiente ISO/TS 32004 de PDF 2.0 con un /ByteRange que cubre exactamente 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 tras un fallo de contraseña, permiso, PDF MAC, etiqueta de cadena o etiqueta de flujo

ReadIncrementalEncryptionContext autentica la cadena de revisiones cifradas actual y recupera el estado de seguridad heredado. EncryptIncrementalObjectBody cifra las cadenas y la carga del flujo en un objeto indirecto modificado preservando las exclusiones de metadatos y actualizando los valores /Length directos; ClearIncrementalEncryptionContext limpia el material de claves recuperado

Funciones

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 opciones en el texto del diccionario /Encrypt
EncryptStreamPayloadCifra un flujo de objeto con AES-256-CBC usando la clave de archivo
EncryptDocumentBytesAsistente de una sola pasada que deriva claves, reescribe flujos e inyecta el diccionario /Encrypt en una matriz de bytes PDF completa
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 revisiones cifradas y recupera la clave de archivo heredada, la revisión, la política de metadatos, la referencia /Encrypt y el estado del PDF MAC
ClearIncrementalEncryptionContextLimpia con seguridad el material de claves de cifrado incremental recuperado
EncryptIncrementalObjectBodyCifra cadenas y flujos en un cuerpo de objeto indirecto modificado bajo el contexto de seguridad heredado

Tipos

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 manejador de seguridad y protección de integridad PDF MAC opcional
TPdfEncryptionKeysRegistro que contiene la clave de archivo, las entradas del manejador 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 validación del PDF MAC independiente y MessageText de diagnóstico

Observaciones

Véase también

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