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, puede cifrar documentos PDF con contraseñas o certificados.

La biblioteca cifra los documentos protegidos utilizando un algoritmo de cifrado de su elección. La biblioteca admite 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 otorgar a los usuarios de archivos PDF protegidos.

Cifrar documentos PDF en C# y VB.NET

Proteger PDF con contraseñas

Los documentos PDF protegidos con contraseña tienen un propietario y, opcionalmente, contraseñas de usuario. Todos los permisos de PDF se otorgan cuando alguien abre un archivo PDF protegido con contraseña con la contraseña del propietario. Si se abre un documento PDF con la contraseña de usuario o sin contraseña alguna, sólo se otorgan permisos de "usuario". Por ejemplo, el autor del archivo PDF cifrado puede no permitir la impresión para los "usuarios", pero el "propietario" aún podrá imprimir el documento.

Para generar un documento PDF protegido con contraseña, cree una instancia de la clase PdfStandardEncryptionHandler y configúrela según sea necesario. Luego asigne el objeto a la propiedad EncryptionHandler en las opciones para guardar el documento. La biblioteca utilizará el controlador para cifrar el documento PDF mientras lo guarda.

Biblioteca Docotic.Pdf 9.3.17014-dev Pruebas de regresión 14,645 pasaron Descargas totales de NuGet 4,172,488

El siguiente fragmento de código muestra cómo crear un archivo PDF protegido con contraseña en C#:

using (PdfDocument document = ...)
{
    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 del propietario y user para la contraseña del usuario. Los visores de PDF necesitarán una contraseña para abrir el archivo PDF seguro. Esto se debe a que la contraseña del usuario no es null ni es una cadena vacía.

Si desea tener un archivo PDF seguro pero le gustaría permitir que cualquiera pueda abrirlo sin contraseña, utilice null o una cadena vacía para la contraseña de usuario.

Proteger PDF con certificados en .NET

Cualquier documento PDF protegido por certificado tiene una colección de destinatarios. La colección puede contener cualquier número de elementos. Cada destinatario describe un certificado que se puede utilizar para descifrar el documento PDF protegido. Para cada destinatario, se especifican permisos de acceso a PDF. Los permisos otorgados para el documento PDF descifrado dependen del certificado utilizado para desproteger el documento.

Algunos permisos de acceso permiten todas las operaciones con el archivo PDF descifrado. A los destinatarios con dichos permisos los llamamos propietarios en la biblioteca Docotic.Pdf. Los destinatarios habituales tienen permisos limitados para el documento PDF descifrado.

Para crear un documento protegido por certificado, comience creando una instancia de la clase PdfPublicKeyEncryptionHandler. Los constructores sin un parámetro de permisos crean un objeto con un destinatario propietario. Utilice constructores con el parámetro de permisos para obtener un controlador de cifrado con un destinatario normal.

Puede agregar más destinatarios propietarios utilizando los métodos AddOwner. Utilice los métodos AddRecipient para agregar destinatarios habituales. Puede agregar tantos propietarios y destinatarios habituales al controlador de cifrado como sea necesario.

Luego indique a la biblioteca que use el controlador mientras guarda el documento. Para ello, asigne el objeto a la propiedad EncryptionHandler en las opciones para guardar el documento.

El siguiente código muestra cómo crear un archivo PDF protegido por certificado en C#. El código prepara un controlador con un propietario y destinatarios habituales. En ambos casos, los certificados para los destinatarios se obtienen de los almacenes de claves proporcionados.

using (PdfDocument document = ...)
{
    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, debe especificar el permiso de PDF para otorgarlo al documento abierto con una contraseña de usuario o un certificado que coincida con un destinatario habitual.

La biblioteca Docotic.Pdf proporciona la clase PdfPermissions para permisos de usuario. Esta clase proporciona dos formas de configurar permisos. Puede configurar todos los permisos a la vez utilizando la propiedad Flags. La alternativa es utilizar propiedades individuales para cada permiso posible.

Al crear un objeto PdfStandardEncryptionHandler, utilice la propiedad UserPermissions para acceder a los permisos. Con un objeto PdfPublicKeyEncryptionHandler, utilice el constructor PdfPermissions. El resto de la configuración es la misma.

El siguiente código muestra cómo configurar permisos de PDF en C#:

// De forma predeterminada, los objetos de permisos lo permiten todo.

// Puede utilizar la propiedad Flags para otorgar solo permisos específicos.
var permisssions1 = new PdfPermissions();
permisssions1.Flags = PdfPermissionFlags.FillFormFields | PdfPermissionFlags.ModifyAnnotations;

// O puede desactivar sólo aquellos permisos que desee denegar.
var permisssions2 = new PdfPermissions();
permisssions2.AssembleDocument = false;
permisssions2.CopyContents = false;
permisssions2.ExtractContents = false;
permisssions2.ModifyContents = false;
permisssions2.PrintDocument = false;
permisssions2.PrintFaithfulCopy = false;

// O puede deshabilitar todos los permisos primero y luego habilitar
// solo aquellos permisos que desee permitir.
var permisssions3 = new PdfPermissions();
permisssions3.AllowEverything = false;
permisssions3.FillFormFields = true;
permisssions3.ModifyAnnotations = true;

// Los objetos permisssions1, permisssions2 y permisssions3 describen
// los mismos permisos en este punto.

Cifre PDF usando AES-256 en .NET

Docotic.Pdf puede cifrar documentos PDF con AES-256. Este algoritmo de cifrado es el más potente admitido por la biblioteca. Tenga en cuenta que es posible que no todos los lectores de PDF admitan el algoritmo.

Después de crear un objeto PdfStandardEncryptionHandler o PdfPublicKeyEncryptionHandler, use 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 está permitido cifrar archivos PDF/A. La biblioteca genera una excepción de tipo PdfException cuando intenta configurar un controlador de cifrado y activar la opción para producir PDF/A en las opciones de guardado de un documento.

PDF/A in a Nutshell tiene consejos sobre cómo proteger PDF/A archivos:

Los usuarios que deseen proteger sus archivos PDF/A deben proteger la ubicación de almacenamiento de estos archivos. Esto se puede lograr implementando protección con contraseña para una carpeta o unidad, por ejemplo.