Эта страница может содержать автоматически переведенный текст.
Шифрование PDF-документов в C# и VB.NET
С помощью библиотеки Docotic.Pdf вы можете шифровать PDF-документы с помощью паролей или сертификатов.
Библиотека шифрует защищенные документы с использованием выбранного вами алгоритма шифрования. Библиотека поддерживает алгоритмы шифрования RC4 40-bit, RC4 128-bit, AES 128-bit и AES 256-bit. Вы сами решаете, какие разрешения предоставлять пользователям защищенных PDF-файлов.

Защита 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, должны защищать место хранения этих файлов. Это можно сделать, например, с помощью парольной защиты для папки или диска.