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

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

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

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

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

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

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

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

Библиотека Docotic.Pdf 9.5.17615-dev Регрессионные тесты 14,813 прошло Всего загрузок NuGet 4,924,084

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// Объекты permissions1, permissions2 и permissions3 описывают
// одинаковые разрешения на данный момент.

Зашифровать PDF с помощью AES-256 в .NET

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

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

Следующий код на C# показывает, как защитить документ PDF с помощью паролей и зашифровать его с помощью АЕС-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 in a Nutshell содержит совет о том, как защитить файлы PDF/A:

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