Esta página puede contener texto traducido automáticamente.
Cifrar documentos PDF en C# y VB.NET
Con la ayuda de la biblioteca Docotic.Pdf, puedes cifrar documentos PDF con contraseñas o certificados.
La biblioteca cifra los documentos protegidos usando un algoritmo de cifrado de tu elección. La biblioteca admite los algoritmos de cifrado RC4 de 40 bits, RC4 de 128 bits, AES de 128 bits y AES de 256 bits. Tú decides qué permisos quieres conceder a los usuarios de los archivos PDF protegidos.

Proteger PDF con contraseñas
Los documentos PDF protegidos con contraseña tienen una contraseña de propietario y, opcionalmente, contraseñas de usuario. Todos los permisos PDF se conceden cuando alguien abre un archivo PDF protegido con contraseña usando la contraseña de propietario. Si un documento PDF se abre con la contraseña de usuario o sin contraseña, solo se conceden los permisos de "usuario". Por ejemplo, el autor del archivo PDF cifrado puede impedir la impresión para los "usuarios", pero el "propietario" seguirá pudiendo imprimir el documento.
Para generar un documento PDF protegido con contraseña, crea una instancia de la clase PdfStandardEncryptionHandler y configúrala según sea necesario. Luego asigna el objeto a la propiedad EncryptionHandler en las opciones de guardado del documento. La biblioteca usará el controlador para cifrar el documento PDF mientras lo guarda.
El siguiente fragmento de código muestra cómo crear un archivo PDF protegido con contraseña en C#:
using var document = new PdfDocument();
var handler = new PdfStandardEncryptionHandler("owner", "user");
handler.UserPermissions.Flags = PdfPermissionFlags.ModifyContents;
var saveOptions = new PdfSaveOptions { EncryptionHandler = handler };
document.Save(outputFileName, saveOptions);
El código anterior usa owner para la contraseña de propietario y user para la contraseña de usuario. Los visores de PDF requerirán una contraseña para abrir el archivo PDF protegido. Esto se debe a que la contraseña de usuario no es null ni una cadena vacía.
Si quieres tener un archivo PDF protegido, pero deseas permitir que cualquiera lo abra sin contraseña, entonces usa null o una cadena vacía para la contraseña de usuario.
Proteger PDF con certificados en .NET
Cualquier documento PDF protegido con certificado tiene una colección de destinatarios. La colección puede contener cualquier cantidad de elementos. Cada destinatario describe un certificado que se puede usar para descifrar el documento PDF protegido. Para cada destinatario, se especifican permisos de acceso PDF. Los permisos concedidos para el documento PDF descifrado dependen del certificado usado para desproteger el documento.
Algunos permisos de acceso permiten todas las operaciones con el archivo PDF descifrado. A los destinatarios con esos permisos los llamamos propietarios en la biblioteca Docotic.Pdf. Los destinatarios normales tienen permisos limitados para el documento PDF descifrado.
Para crear un documento protegido con certificado, empieza creando una instancia de la clase PdfPublicKeyEncryptionHandler. Los constructores sin un parámetro de permisos crean un objeto con un destinatario propietario. Usa los constructores con el parámetro de permisos para obtener un controlador de cifrado con un destinatario normal.
Puedes agregar más destinatarios propietarios usando los métodos AddOwner. Usa los métodos AddRecipient para agregar destinatarios normales. Puedes agregar tantos propietarios y destinatarios normales al controlador de cifrado como sea necesario.
Luego indica a la biblioteca que use el controlador mientras guarda el documento. Para ello, asigna el objeto a la propiedad EncryptionHandler en las opciones de guardado del documento.
El siguiente código muestra cómo crear un archivo PDF protegido con certificado en C#. El código prepara un controlador con un propietario y destinatarios normales. En ambos casos, los certificados para los destinatarios se toman de los almacenes de claves proporcionados.
using var document = new PdfDocument();
var handler = new PdfPublicKeyEncryptionHandler("owner-key-store.p12", "password");
var permissions = new PdfPermissions();
permissions.Flags = PdfPermissionFlags.FillFormFields | PdfPermissionFlags.PrintDocument;
handler.AddRecipient("recipient-key-store.p12", "password", permissions);
var saveOptions = new PdfSaveOptions { EncryptionHandler = handler };
document.Save(outputFileName, saveOptions);
Restringir la edición de un archivo PDF
Al cifrar un documento PDF, es necesario configurar permisos para los usuarios del archivo. En otras palabras, debes especificar el permiso PDF que se concederá al documento abierto con una contraseña de usuario o un certificado que coincida con un destinatario normal.
La biblioteca Docotic.Pdf proporciona la clase PdfPermissions para los permisos de usuario. Esta clase ofrece dos formas de configurar permisos. Puedes configurar todos los permisos a la vez usando la propiedad Flags. La alternativa es usar propiedades individuales para cada permiso posible.
Al crear un objeto PdfStandardEncryptionHandler, usa la propiedad UserPermissions para acceder a los permisos. Con un objeto PdfPublicKeyEncryptionHandler, usa el constructor PdfPermissions. El resto de la configuración es la misma.
El siguiente código muestra cómo configurar permisos PDF en C#:
// De forma predeterminada, los objetos de permisos permiten todo.
// Puedes usar la propiedad Flags para conceder solo permisos específicos.
var permisssions1 = new PdfPermissions
{
Flags = PdfPermissionFlags.FillFormFields | PdfPermissionFlags.ModifyAnnotations
};
// O puedes deshabilitar solo aquellos permisos que quieras denegar.
var permisssions2 = new PdfPermissions
{
AssembleDocument = false,
CopyContents = false,
ExtractContents = false,
ModifyContents = false,
PrintDocument = false,
PrintFaithfulCopy = false
};
// O puedes deshabilitar primero todos los permisos y luego habilitar solo aquellos
// permisos que quieras permitir.
var permisssions3 = new PdfPermissions
{
AllowEverything = false,
FillFormFields = true,
ModifyAnnotations = true
};
// Los objetos permisssions1, permisssions2 y permisssions3 describen
// los mismos permisos en este punto.
Cifrar PDF usando AES-256 en .NET
Docotic.Pdf puede cifrar documentos PDF con AES-256. Este algoritmo de cifrado es el más fuerte admitido por la biblioteca. Ten en cuenta que no todos los lectores de PDF podrían admitir el algoritmo.
Después de crear un objeto PdfStandardEncryptionHandler o PdfPublicKeyEncryptionHandler, usa la propiedad Algorithm para configurar el algoritmo de cifrado.
El siguiente código C# muestra cómo proteger un documento PDF con contraseñas y cifrarlo usando AES-256:
using var pdf = new PdfDocument();
// ....
var handler = new PdfStandardEncryptionHandler("owner", "user");
handler.Algorithm = PdfEncryptionAlgorithm.Aes256Bit;
var saveOptions = new PdfSaveOptions { EncryptionHandler = handler };
pdf.Save("encrypted", saveOptions);
Cifrado y PDF/A
No se permite cifrar archivos PDF/A. La biblioteca lanza una excepción de tipo PdfException cuando intentas configurar un controlador de cifrado y activar la opción para generar PDF/A en las opciones de guardado del documento.
PDF/A in a Nutshell ofrece consejos sobre cómo proteger archivos PDF/A:
Los usuarios que deseen proteger sus archivos PDF/A deben proteger la ubicación de almacenamiento de estos archivos. Esto se puede lograr, por ejemplo, implementando protección con contraseña para una carpeta o unidad.