PDFドキュメントにパスワードを設定して保護する

PDFドキュメントに機密および極秘情報が含まれているケースでは、セキュリティ設定を実施して権限のないユーザーによる参照や変更などを制限する必要があります。

本記事では、「DioDocs for PDF(ディオドック)」を使用してパスワードを設定し、コピーや編集、印刷など特定の機能を制限することでPDFドキュメントへのアクセスを制限する方法を紹介します。

暗号化アルゴリズム

DioDocs for PDFでは、PDFの仕様で定義されている標準セキュリティハンドラのリビジョン2~6に対応しており、そこで利用される2つの暗号化アルゴリズムに対応しています。

  • Rivest Cipher 4 (RC4)
  • Advanced Encryption Standard (AES)

標準セキュリティハンドラの各リビジョンに対応したクラスが用意されており、これらを使用することでPDFドキュメントにパスワードを設定しPDFドキュメントを保護することができます。

ユーザーパスワードを使用する

PDFでは2種類のパスワードを設定できます。ユーザーパスワードは権限のないユーザーがPDFドキュメントを開いたり閲覧するのを制限します。DioDocs for PDFでは、UserPasswordプロパティを使用してユーザーパスワードを設定します。

以下のコードでは、StandardSecurityHandlerRev6クラス(標準セキュリティハンドラリビジョン6)を使用してPDFドキュメントにユーザーパスワードを設定しています。

GcPdfDocument doc = new GcPdfDocument();
GcPdfGraphics g = doc.NewPage().Graphics;

TextFormat tf = new TextFormat();
tf.Font = StandardFonts.Times;
tf.FontSize = 14;

g.DrawString("こんにちは、DioDocs!", tf, new PointF(72, 72));

// 暗号化を追加します
StandardSecurityHandlerRev6 ssh = new StandardSecurityHandlerRev6();
ssh.UserPassword = "userpwd";

// EncryptHandlerプロパティを設定します
doc.Security.EncryptHandler = ssh;

// ドキュメントを保存します
doc.Save("result.pdf");

実行すると、PDFドキュメントはユーザーパスワードで保護されており、次のようなセキュリティ設定が確認できます。

ユーザーパスワードを使用する

オーナーパスワードを使用する

オーナーパスワードは、印刷、コンテンツのコピーや編集、ページの抽出、コメントの作成など、PDFドキュメントのさまざまな制限を設定できます。DioDocs for PDFでは、OwnerPasswordプロパティを使用してオーナーパスワードを設定します。

以下のコードでは、StandardSecurityHandlerRev6クラス(標準セキュリティハンドラリビジョン6)を使用してPDFドキュメントにオーナーパスワードを設定しています。さらにEditingPermissionsCopyContentCopyContentAccessibilityPrintingPermissionsプロパティで印刷やコピー、編集を制限するように設定しています。

GcPdfDocument doc = new GcPdfDocument();
GcPdfGraphics g = doc.NewPage().Graphics;

TextFormat tf = new TextFormat();
tf.Font = StandardFonts.Times;
tf.FontSize = 14;

g.DrawString("こんにちは、DioDocs!", tf, new PointF(72, 72));

// 暗号化を追加します
StandardSecurityHandlerRev6 ssh = new StandardSecurityHandlerRev6();
ssh.UserPassword = "userpwd";
ssh.OwnerPassword = "ownpwd";

ssh.EditingPermissions = EditingPermissions.Disabled;
ssh.CopyContent = false;
ssh.CopyContentAccessibility = false;
ssh.PrintingPermissions = PrintingPermissions.Disabled;

// EncryptHandlerプロパティを設定します
doc.Security.EncryptHandler = ssh;

// ドキュメントを保存します
doc.Save("result.pdf");

実行すると、PDFドキュメントはオーナーパスワードで保護されており、次のようなセキュリティ設定が確認できます。

オーナーパスワードを使用する

既存のPDFドキュメントにパスワードを設定する

DioDocs for PDFでは、新規に作成したPDFドキュメントだけではなく、既存のPDFドキュメントを読み込んでパスワードを設定して保護することも可能です。

以下のコードでは、Loadメソッドで対象となるPDFドキュメントを読み込んで、先ほどと同じようにオーナーパスワードを設定しています。

FileStream fs = File.OpenRead("test.pdf");
GcPdfDocument doc = new GcPdfDocument();
doc.Load(fs);

// 暗号化を追加します
StandardSecurityHandlerRev6 ssh = new StandardSecurityHandlerRev6();
ssh.UserPassword = "userpwd";
ssh.OwnerPassword = "ownpwd";

ssh.EditingPermissions = EditingPermissions.Disabled;
ssh.CopyContent = false;
ssh.CopyContentAccessibility = false;
ssh.PrintingPermissions = PrintingPermissions.Disabled;

// EncryptHandlerプロパティを設定します
doc.Security.EncryptHandler = ssh;

// ドキュメントを保存します
doc.Save("result-test.pdf");

実行すると、PDFドキュメントはオーナーパスワードで保護されており、次のようなセキュリティ設定が確認できます。

既存のPDFドキュメントにパスワードを設定する

パスワードが設定されているPDFドキュメントを読み込む

DioDocs for PDFでは、パスワードが設定されている既存のPDFドキュメントを読み込むことももちろん可能です。以下のようにLoadメソッドの第2引数にパスワードを設定します。

FileStream fs = File.OpenRead("result-test.pdf");
GcPdfDocument doc = new GcPdfDocument();
doc.Load(fs, "ownpwd");

上記コードを実装しているサンプルは以下です。

さいごに

弊社Webサイトでは、製品の機能を気軽に試せるデモアプリケーションやトライアル版も公開していますので、こちらもご確認いただければと思います。

また、ご導入前の製品に関するご相談やご導入後の各種サービスに関するご質問など、お気軽にお問合せください。

\  この記事をシェアする  /