このページには自動翻訳されたテキストを含めることができます。

C# および VB.NET で PDF ドキュメントを暗号化する

Docotic.Pdf ライブラリを使用すると、PDF ドキュメントをパスワードまたは証明書で暗号化できます。

このライブラリは、任意の暗号化アルゴリズムを使用して保護されたドキュメントを暗号化します。ライブラリは、RC4 40-bit、RC4 128-bit、AES 128-bit、AES 256-bit の暗号化アルゴリズムをサポートしています。保護された PDF ファイルのユーザーにどの権限を付与するかは、ユーザーが決定します。

C# および VB.NET で PDF ドキュメントを暗号化する

パスワードによる PDF の保護

パスワードで保護された PDF ドキュメントには、所有者パスワードと、必要に応じてユーザーパスワードがあります。所有者パスワードでパスワード保護された PDF ファイルを開くと、すべての PDF 権限が付与されます。PDF ドキュメントをユーザーパスワードで、またはパスワードなしで開くと、付与されるのは「user」権限のみです。たとえば、暗号化された PDF ファイルの作成者は「users」の印刷を禁止できますが、「owner」は引き続きドキュメントを印刷できます。

パスワードで保護された PDF ドキュメントを作成するには、PdfStandardEncryptionHandler クラスのインスタンスを作成し、必要に応じて設定します。その後、ドキュメント保存オプションの EncryptionHandler プロパティにそのオブジェクトを割り当てます。ライブラリは、保存時にこのハンドラーを使用して PDF ドキュメントを暗号化します。

次のコード スニペットは、C# でパスワード保護された PDF ファイルを作成する方法を示します。

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 または空の文字列を使用します。

.NET で証明書を使用して PDF を保護する

証明書で保護された PDF ドキュメントには、受信者のコレクションがあります。このコレクションには、任意の数の項目を含めることができます。各受信者は、保護された PDF ドキュメントを復号するために使用できる証明書を表します。各受信者には、PDF アクセス権限が指定されます。復号された PDF ドキュメントに付与される権限は、ドキュメントの保護解除に使用した証明書に依存します。

一部のアクセス権限では、復号された PDF ファイルに対するすべての操作が許可されます。Docotic.Pdf ライブラリでは、そのような権限を持つ受信者を所有者と呼びます。通常の受信者は、復号された PDF ドキュメントに対して制限された権限を持ちます。

証明書で保護されたドキュメントを作成するには、まず PdfPublicKeyEncryptionHandler クラスのインスタンスを作成します。権限パラメーターのないコンストラクターは、所有者受信者を持つオブジェクトを作成します。権限パラメーター付きのコンストラクターを使用すると、通常受信者を持つ暗号化ハンドラーを取得できます。

AddOwner メソッドを使用して、所有者受信者を追加できます。AddRecipient メソッドを使用して、通常受信者を追加します。必要に応じて、暗号化ハンドラーに所有者受信者と通常受信者をいくつでも追加できます。

その後、ドキュメントを保存する際にライブラリがそのハンドラーを使用するように指示します。そのために、ドキュメント保存オプションの EncryptionHandler プロパティにそのオブジェクトを割り当てます。

次のコードは、C# で証明書で保護された PDF ファイルを作成する方法を示します。このコードは、所有者と通常受信者を含むハンドラーを準備します。どちらの場合も、受信者の証明書は提供されたキーストアから取得されます。

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 クラスを提供します。このクラスには、権限を設定する 2 つの方法があります。Flags プロパティを使用して、すべての権限を一度に設定できます。代替方法は、各権限に対して個別のプロパティを使用することです。

PdfStandardEncryptionHandler オブジェクトを作成するときは、UserPermissions プロパティを使用して権限にアクセスします。PdfPublicKeyEncryptionHandler オブジェクトでは、PdfPermissions コンストラクターを使用します。残りの設定は同じです。

次のコードは、C# で PDF 権限を設定する方法を示します。

// 既定では、権限オブジェクトはすべてを許可します。

// `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 オブジェクトは
// 同じ権限を表しています。

.NET で AES-256 を使用して PDF を暗号化する

Docotic.Pdf は、AES-256 で PDF ドキュメントを暗号化できます。この暗号化アルゴリズムは、ライブラリでサポートされている中で最も強力です。ただし、すべての 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 ファイルを暗号化することはできません。ドキュメント保存オプションで暗号化ハンドラーを設定し、PDF/A を生成するオプションを有効にしようとすると、ライブラリは PdfException 型の例外をスローします。

PDF/A の要点 には、PDF/A ファイルを保護する方法についての助言があります。

PDF/A ファイルを保護したいユーザーは、これらのファイルの保存場所を保護する必要があります。たとえば、フォルダーやドライブにパスワード保護を実装することで実現できます。