Python でプレゼンテーションをパスワード保護
概要
オープンパスワードはプレゼンテーションを暗号化します。正しいパスワードが必要となり、プレゼンテーションの内容をロードして表示できるため、この保護は機密性を提供します。
オープンパスワードは書き込み保護パスワードとは異なります。書き込み保護は変更を制限しますが、コンテンツを暗号化したりプレゼンテーションのロードを防止したりはしません。プレゼンテーションの変更用パスワードを管理するには、Write-Protect Presentations を参照してください。
以下のワークフローは PPT と PPTX の両方のプレゼンテーションに適用されます。例では、ファイルベースとストリームベースの動作が重要な場合に両方の形式を使用しています。
オープンパスワードでプレゼンテーションを暗号化する
オープンパスワードを設定するには、ProtectionManager.encrypt を使用します。その後、Presentation.save を使用して暗号化されたプレゼンテーションを保存します。
次の例は PPTX プレゼンテーションを暗号化します。
import aspose.slides as slides
with slides.Presentation("pres.pptx") as presentation:
presentation.protection_manager.encrypt("open_password")
presentation.save("encrypted-pres.pptx", slides.export.SaveFormat.PPTX)
ドキュメントプロパティを公開する
デフォルトでは、Aspose.Slides はプレゼンテーションの暗号化に文書プロパティを含めます。スライドコンテンツの暗号化とは独立してこの動作を制御するのがProtectionManager.encrypt_document_properties プロパティです。インデックス作成、分類、検索、または文書管理システムがオープンパスワードなしでメタデータを読み取る必要がある場合は、ProtectionManager.encrypt を呼び出す前にこれを False に設定します。
次の例は、組み込みの文書プロパティを公開したまま暗号化された PPTX プレゼンテーションを作成します。
import aspose.slides as slides
with slides.Presentation() as presentation:
properties = presentation.document_properties
properties.author = "Contoso Knowledge Management"
properties.title = "Quarterly Product Roadmap"
properties.keywords = "roadmap, planning, internal"
presentation.slides[0].name = "Encrypted presentation content"
presentation.protection_manager.encrypt_document_properties = False
presentation.protection_manager.encrypt("open_password")
presentation.save("public-properties-encrypted.pptx", slides.export.SaveFormat.PPTX)
encrypt_document_properties を False に設定しても、スライド、マスター、レイアウト、シェイプ、メディア、またはその他のプレゼンテーションコンテンツが公開されるわけではありません。影響を受けるのは文書プロパティのみです。暗号化されたコンテンツをロードせずにこれらのプロパティを読み取るには、Manage Presentation Properties を参照してください。
暗号化されたプレゼンテーションをロードする
オープンパスワードを LoadOptions.password に設定し、ファイルをロードする際にそのオプションを Presentation に渡します。オープンパスワードが必要なのに提供されたパスワードが欠如しているか間違っている場合、ロードは失敗します。
import aspose.slides as slides
load_options = slides.LoadOptions()
load_options.password = "open_password"
with slides.Presentation("encrypted-pres.pptx", load_options) as presentation:
# 復号されたプレゼンテーションで作業します。
pass
プレゼンテーションから暗号化を解除する
オープンパスワードでプレゼンテーションをロードし、ProtectionManager.remove_encryption を呼び出して結果を保存します。保存されたプレゼンテーションはパスワードなしでロードできるようになります。
import aspose.slides as slides
load_options = slides.LoadOptions()
load_options.password = "open_password"
with slides.Presentation("encrypted-pres.pptx", load_options) as presentation:
presentation.protection_manager.remove_encryption()
presentation.save("encryption-removed.pptx", slides.export.SaveFormat.PPTX)
ロード前にオープンパスワードを検証する
PresentationFactory.get_presentation_info を使用して、完全なプレゼンテーションインスタンスを作成せずに PresentationInfo を取得します。パスワードの要求または検証の前に、PresentationInfo.is_password_protected を確認します。保護が存在する場合、提供された値を PresentationInfo.check_password で検証します。
ファイルパス ワークフロー
次の例は PPTX ファイルのオープンパスワードを検証し、検証された値を LoadOptions.password に渡してから、完全なプレゼンテーションをロードします。
import aspose.slides as slides
file_path = "protected-presentation.pptx"
password = "open_password"
presentation_info = slides.PresentationFactory.instance.get_presentation_info(file_path)
if not presentation_info.is_password_protected:
print("The presentation does not have an opening password.")
elif not presentation_info.check_password(password):
print("The opening password is incorrect.")
else:
load_options = slides.LoadOptions()
load_options.password = password
with slides.Presentation(file_path, load_options) as presentation:
print("The presentation was validated and loaded successfully.")
ストリーム ワークフロー
PresentationFactory.get_presentation_info のストリームオーバーロードは同じワークフローを提供します。そのストリームから完全なプレゼンテーションをロードする前に、シーク可能なストリームの位置をリセットしてください。
次の例は PPT ファイルを使用します。
import aspose.slides as slides
password = "open_password"
with open("protected-presentation.ppt", "rb") as presentation_stream:
presentation_info = slides.PresentationFactory.instance.get_presentation_info(presentation_stream)
if not presentation_info.is_password_protected:
print("The presentation does not have an opening password.")
elif not presentation_info.check_password(password):
print("The opening password is incorrect.")
else:
presentation_stream.seek(0)
load_options = slides.LoadOptions()
load_options.password = password
with slides.Presentation(presentation_stream, load_options) as presentation:
print("The presentation was validated and loaded successfully.")
CheckPassword の戻り値
PresentationInfo.check_password は、プレゼンテーションにオープンパスワードが設定され、提供されたパスワードが正しい場合にのみ True を返します。次のいずれかの場合は False を返します。
- パスワードが正しくない。
- プレゼンテーションにオープンパスワードが設定されていない。
- 提供されたパスワードが
Noneまたは空です。
この動作は PPT と PPTX のプレゼンテーションで同じです。
ロードしたプレゼンテーションが暗号化されているか確認する
正しいパスワードでプレゼンテーションをロードした後、ProtectionManager.is_encrypted を確認して、元のプレゼンテーションが暗号化されていることを確認します。ロード前にオープンパスワード保護を検出するには、上記のように PresentationInfo.is_password_protected を使用します。
import aspose.slides as slides
load_options = slides.LoadOptions()
load_options.password = "open_password"
with slides.Presentation("encrypted-pres.pptx", load_options) as presentation:
is_encrypted = presentation.protection_manager.is_encrypted
print("The presentation is encrypted: " + str(is_encrypted))
セキュリティに関する推奨事項
Security
オープンパスワードをログに記録したり診断メッセージに含めたりしないでください。不要な繰り返しの検証試行は避け、パスワードは必要な間だけメモリに保持し、プレゼンテーションをすぐにロードする際は成功した検証結果を再利用してください。
プレゼンテーションのコンテンツが暗号化されていても、公開された文書プロパティは作者名、タイトル、テーマ、キーワード、会社情報、コメント、カスタム値などを漏洩させる可能性があります。機密メタデータはプレゼンテーションとともに暗号化してください。プロパティを公開したままにするのは、システムがオープンパスワードなしでファイルをインデックス付け、分類、検索、または管理しなければならない場合にのみ、明示的に決定すべきです。
オンラインでプレゼンテーションにパスワード保護を設定する
- Aspose.Slides Lock アプリケーションを開きます。
- プレゼンテーションを選択またはアップロードします。
- 閲覧保護用のパスワードを入力します。
- 必要に応じて、編集保護用の別のパスワードを入力します。
- 保護を適用し、生成されたファイルをダウンロードします。
See also
よくある質問
オープンパスワードと書き込み保護パスワードの違いは何ですか?
オープンパスワードはプレゼンテーションを暗号化し、コンテンツをロードするために必要です。書き込み保護パスワードはコンテンツを暗号化せずに変更を制限します。
すべてのスライドをロードせずにオープンパスワードを検証できますか?
はい。プレゼンテーション情報を取得し、オープンパスワード保護が存在するか確認し、完全なプレゼンテーションインスタンスを作成する前にパスワードを検証してください。
アプリケーションはオープンパスワードなしでメタデータを読み取れますか?
はい、ただしプレゼンテーションが encrypt_document_properties を False に設定して暗号化された場合に限ります。その場合、アプリケーションは Manage Presentation Properties で説明されている文書プロパティのみのロードモードを使用する必要があります。
パスワード検証ワークフローは PPT と PPTX の両方をサポートしていますか?
はい。ファイルパスとストリームベースのパスワード検出および検証は、PPT と PPTX のプレゼンテーションで同じように動作します。