Эта страница может содержать автоматически переведенный текст.

Шифрование PDF-документов в C# и VB.NET

С помощью библиотеки Docotic.Pdf вы можете шифровать PDF-документы с помощью паролей или сертификатов.

Библиотека шифрует защищенные документы с использованием выбранного вами алгоритма шифрования. Библиотека поддерживает алгоритмы шифрования RC4 40-bit, RC4 128-bit, AES 128-bit и AES 256-bit. Вы сами решаете, какие разрешения предоставлять пользователям защищенных PDF-файлов.

Шифрование PDF-документов в C# и VB.NET

Защита PDF с помощью паролей

PDF-документы, защищенные паролем, имеют пароль владельца и, при необходимости, пароль пользователя. Все разрешения PDF предоставляются, когда кто-то открывает PDF-файл, защищенный паролем, с паролем владельца. Если PDF-документ открыт с паролем пользователя или вообще без пароля, предоставляются только разрешения «пользователя». Например, автор зашифрованного PDF-файла может запретить печать для «пользователей», но «владелец» по-прежнему сможет печатать документ.

Чтобы создать PDF-документ, защищенный паролем, создайте экземпляр класса PdfStandardEncryptionHandler и настройте его по необходимости. Затем назначьте объект свойству EncryptionHandler в параметрах сохранения документа. Библиотека использует обработчик для шифрования PDF-документа при его сохранении.

Следующий фрагмент кода показывает, как создать PDF-файл, защищенный паролем, в 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);

В приведенном выше коде для пароля владельца используется owner, а для пароля пользователя — user. Средства просмотра PDF потребуют пароль для открытия защищенного PDF-файла. Это связано с тем, что пароль пользователя не равен null или пустой строке.

Если вам нужен защищенный PDF-файл, но вы хотите разрешить любому пользователю открывать его без пароля, используйте для пароля пользователя null или пустую строку.

Защита PDF с помощью сертификатов в .NET

Любой PDF-документ, защищенный сертификатом, имеет набор получателей. Набор может содержать любое количество элементов. Каждый получатель описывает сертификат, который можно использовать для расшифровки защищенного PDF-документа. Для каждого получателя указаны разрешения доступа к PDF. Предоставляемые разрешения для расшифрованного PDF-документа зависят от сертификата, используемого для снятия защиты с документа.

Некоторые разрешения доступа позволяют выполнять все операции с расшифрованным PDF-файлом. Получателей с такими разрешениями мы называем владельцами в библиотеке Docotic.Pdf. Обычные получатели имеют ограниченные разрешения для расшифрованного PDF-документа.

Чтобы создать документ, защищенный сертификатом, начните с создания экземпляра класса PdfPublicKeyEncryptionHandler. Конструкторы без параметра permissions создают объект с получателем-владельцем. Используйте конструкторы с параметром permissions, чтобы получить обработчик шифрования с обычным получателем.

Вы можете добавить больше получателей-владельцев, используя методы AddOwner. Используйте методы AddRecipient, чтобы добавить обычных получателей. При необходимости можно добавить в обработчик шифрования столько владельцев и обычных получателей, сколько нужно.

Затем укажите библиотеке использовать этот обработчик при сохранении документа. Для этого назначьте объект свойству EncryptionHandler в параметрах сохранения документа.

Следующий код показывает, как создать PDF-файл, защищенный сертификатом, в C#. Код подготавливает обработчик с владельцем и обычными получателями. В обоих случаях сертификаты для получателей берутся из предоставленных хранилищ ключей.

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);

Ограничение редактирования PDF-файла

При шифровании PDF-документа требуется настроить разрешения для пользователей файла. Иными словами, нужно указать разрешения PDF, которые будут предоставлены для документа, открытого с паролем пользователя или сертификатом, соответствующим обычному получателю.

Библиотека Docotic.Pdf предоставляет класс PdfPermissions для разрешений пользователя. Этот класс предлагает два способа настройки разрешений. Можно задать все разрешения сразу с помощью свойства Flags. Альтернатива — использовать отдельные свойства для каждого возможного разрешения.

При создании объекта PdfStandardEncryptionHandler используйте свойство UserPermissions для доступа к разрешениям. Для объекта PdfPublicKeyEncryptionHandler используйте конструктор PdfPermissions. Остальная настройка остается такой же.

Следующий код показывает, как настроить разрешения PDF в C#:

// По умолчанию объекты разрешений разрешают все.

// Свойство Flags можно использовать, чтобы выдать только определенные разрешения.
var permisssions1 = new PdfPermissions
{
    Flags = PdfPermissionFlags.FillFormFields | PdfPermissionFlags.ModifyAnnotations
};

// Или можно отключить только те разрешения, в которых вы хотите отказать. 
var permisssions2 = new PdfPermissions
{
    AssembleDocument = false,
    CopyContents = false,
    ExtractContents = false,
    ModifyContents = false,
    PrintDocument = false,
    PrintFaithfulCopy = false
};

// Или сначала можно отключить все разрешения, а затем включить только те
// разрешения, которые вы хотите разрешить.
var permisssions3 = new PdfPermissions
{
    AllowEverything = false,
    FillFormFields = true,
    ModifyAnnotations = true
};

// Объекты permisssions1, permisssions2 и permisssions3 описывают
// одни и те же разрешения на этом этапе.

Шифрование PDF с помощью AES-256 в .NET

Docotic.Pdf может шифровать PDF-документы с помощью AES-256. Этот алгоритм шифрования является самым сильным из поддерживаемых библиотекой. Обратите внимание, что не каждый PDF-ридер может поддерживать этот алгоритм.

После создания объекта PdfStandardEncryptionHandler или PdfPublicKeyEncryptionHandler используйте свойство Algorithm для настройки алгоритма шифрования.

Следующий код на C# показывает, как защитить PDF-документ паролями и зашифровать его с помощью 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);

Шифрование и PDF/A

Шифровать файлы PDF/A не разрешается. Библиотека выбрасывает исключение типа PdfException, когда вы пытаетесь настроить обработчик шифрования и включить параметр создания PDF/A в параметрах сохранения документа.

PDF/A в двух словах содержит рекомендации по защите файлов PDF/A:

Пользователи, которые хотят защитить свои файлы PDF/A, должны защищать место хранения этих файлов. Это можно сделать, например, с помощью парольной защиты для папки или диска.