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 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
| Función | Descripción |
|---|---|
DeriveEncryptionKeys | Ejecuta la derivación de claves basada en contraseña y devuelve la clave de archivo y las cinco entradas de diccionario |
BuildEncryptDictionary | Serializa las claves y las opciones en el texto del diccionario /Encrypt |
EncryptStreamPayload | Cifra un flujo de objeto con AES-256-CBC usando la clave de archivo |
EncryptDocumentBytes | Auxiliar 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 |
DecryptAesGcmDocumentBytes | Autentica y descifra la salida AESV4-GCM en bytes de texto plano que PDFium puede cargar |
ValidateEncryptedDocumentMac | Valida un PDF MAC independiente contra los bytes cifrados originales usando una contraseña de usuario o de propietario |
ReadIncrementalEncryptionContext | Autentica 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 |
ClearIncrementalEncryptionContext | Borra de forma segura el material de claves de cifrado incremental recuperado |
EncryptIncrementalObjectBody | Cifra las cadenas y los flujos en el cuerpo de un objeto indirecto cambiado bajo el contexto de seguridad heredado |
| Tipo | Descripción |
|---|---|
TPdfEncryptionRevision | Enumeración que selecciona la revisión AESV3-CBC erR5 o erR6, o la revisión AESV4-GCM de ISO/TS 32003 erR7 |
TPdfEncryptOptions | Registro 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 |
TPdfEncryptionKeys | Registro que contiene la clave de archivo, las entradas del controlador de seguridad y el /KDFSalt de 32 bytes opcional |
TPdfIncrementalEncryptionContext | Estado de seguridad heredado autenticado, usado para anexar objetos indirectos cifrados sin reemplazar el diccionario /Encrypt existente |
TPdfMacValidationStatus | pmvsValid, pmvsNotPresent, pmvsInvalid o pmvsUnsupported |
TPdfMacValidationResult | Status de la validación independiente del PDF MAC y MessageText de diagnóstico |
DecryptAesGcmDocumentBytes sigue las cadenas de revisión /Prev clásicas emitidas por el escritor incremental cifrado y resuelve la generación de objeto activa más reciente; la carga nativa de AESV4 en PDFium y la entrada AESV4 de xref-stream externo no están disponibles en esta versiónPermissions usa la distribución de bits de la Tabla 22 de ISO 32000-1 (indicadores /P)