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

セキュリティに関する推奨事項

オンラインでプレゼンテーションにパスワード保護を設定する

  1. Aspose.Slides Lock アプリケーションを開きます。
  2. プレゼンテーションを選択またはアップロードします。
  3. 閲覧保護用のパスワードを入力します。
  4. 必要に応じて、編集保護用の別のパスワードを入力します。
  5. 保護を適用し、生成されたファイルをダウンロードします。

よくある質問

オープンパスワードと書き込み保護パスワードの違いは何ですか?

オープンパスワードはプレゼンテーションを暗号化し、コンテンツをロードするために必要です。書き込み保護パスワードはコンテンツを暗号化せずに変更を制限します。

すべてのスライドをロードせずにオープンパスワードを検証できますか?

はい。プレゼンテーション情報を取得し、オープンパスワード保護が存在するか確認し、完全なプレゼンテーションインスタンスを作成する前にパスワードを検証してください。

アプリケーションはオープンパスワードなしでメタデータを読み取れますか?

はい、ただしプレゼンテーションが encrypt_document_properties を False に設定して暗号化された場合に限ります。その場合、アプリケーションは Manage Presentation Properties で説明されている文書プロパティのみのロードモードを使用する必要があります。

パスワード検証ワークフローは PPT と PPTX の両方をサポートしていますか?

はい。ファイルパスとストリームベースのパスワード検出および検証は、PPT と PPTX のプレゼンテーションで同じように動作します。