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

概要

オープニング パスワードはプレゼンテーションを暗号化します。正しいパスワードが必要で、プレゼンテーションのコンテンツを読み込み表示できるため、この保護は機密性を提供します。

オープニング パスワードは書き込み保護パスワードとは異なります。書き込み保護は変更を制限しますが、コンテンツを暗号化したりプレゼンテーションの読み込みを防止したりはしません。プレゼンテーションの変更用パスワードを管理するには、書き込み保護されたプレゼンテーションをご覧ください。

以下のワークフローは PPT と PPTX の両方のプレゼンテーションに適用されます。例では、ファイルベースとストリームベースの動作が重要な場合の両形式を使用しています。

オープニング パスワードでプレゼンテーションを暗号化する

ProtectionManager::encrypt を使用してオープニング パスワードを割り当てます。その後、Presentation::save を使用して暗号化されたプレゼンテーションを永続化します。

次の例は PPTX プレゼンテーションを暗号化します:

use aspose\slides\Presentation;
use aspose\slides\SaveFormat;

$presentation = new Presentation("pres.pptx");
try {
    $presentation->getProtectionManager()->encrypt("open_password");
    $presentation->save("encrypted-pres.pptx", SaveFormat::Pptx);
} finally {
    $presentation->dispose();
}

ドキュメント プロパティを公開したままにする

既定では、Aspose.Slides はプレゼンテーション暗号化にドキュメント プロパティを含めます。ProtectionManager::setEncryptDocumentProperties メソッドは、スライド コンテンツの暗号化とは独立してこの動作を制御します。インデックス作成、分類、検索、またはドキュメント管理システムがオープニング パスワードなしでメタデータを読み取る必要がある場合は、ProtectionManager::encrypt を呼び出す前に false を渡します。

次の例は、組み込みドキュメント プロパティを公開したまま暗号化された PPTX プレゼンテーションを作成します:

use aspose\slides\Presentation;
use aspose\slides\SaveFormat;

$presentation = new Presentation();
try {
    $properties = $presentation->getDocumentProperties();
    $properties->setAuthor("Contoso Knowledge Management");
    $properties->setTitle("Quarterly Product Roadmap");
    $properties->setKeywords("roadmap, planning, internal");

    $presentation->getSlides()->get_Item(0)->setName("Encrypted presentation content");
    $presentation->getProtectionManager()->setEncryptDocumentProperties(false);
    $presentation->getProtectionManager()->encrypt("open_password");
    $presentation->save("public-properties-encrypted.pptx", SaveFormat::Pptx);
} finally {
    $presentation->dispose();
}

ProtectionManager::setEncryptDocumentPropertiesfalse を渡しても、スライド、マスター、レイアウト、シェイプ、メディア、その他のプレゼンテーション コンテンツが公開されるわけではありません。影響を受けるのはドキュメント プロパティだけです。暗号化されたコンテンツを読み込まずにそれらのプロパティを取得する方法については、Manage Presentation Properties を参照してください。

暗号化されたプレゼンテーションを読み込む

LoadOptions::setPassword にオープニング パスワードを設定し、ファイルの読み込み時にオプションを Presentation に渡します。オープニング パスワードが必要なのにパスワードが提供されていない、または誤っている場合は読み込みが失敗します。

use aspose\slides\LoadOptions;
use aspose\slides\Presentation;

$loadOptions = new LoadOptions();
$loadOptions->setPassword("open_password");

$presentation = new Presentation("encrypted-pres.pptx", $loadOptions);
try {
    # 復号化されたプレゼンテーションを扱う。
} finally {
    $presentation->dispose();
}

プレゼンテーションから暗号化を除去する

プレゼンテーションをオープニング パスワードで読み込み、ProtectionManager::removeEncryption を呼び出し、結果を保存します。保存されたプレゼンテーションはパスワードなしで読み込めるようになります。

use aspose\slides\LoadOptions;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;

$loadOptions = new LoadOptions();
$loadOptions->setPassword("open_password");

$presentation = new Presentation("encrypted-pres.pptx", $loadOptions);
try {
    $presentation->getProtectionManager()->removeEncryption();
    $presentation->save("encryption-removed.pptx", SaveFormat::Pptx);
} finally {
    $presentation->dispose();
}

読み込み前にオープニング パスワードを検証する

PresentationFactory::getPresentationInfo を使用して、完全なプレゼンテーション インスタンスを作成せずに PresentationInfo を取得します。PresentationInfo::isPasswordProtected を確認してから、パスワードの要求または検証を行います。保護が存在する場合は、PresentationInfo::checkPassword で提供された値を検証します。

ファイル パス ワークフロー

次の例は PPTX ファイルのオープニング パスワードを検証し、検証済みの値を LoadOptions::setPassword に渡してから完全なプレゼンテーションを読み込みます:

use aspose\slides\LoadOptions;
use aspose\slides\Presentation;
use aspose\slides\PresentationFactory;

$filePath = "protected-presentation.pptx";
$password = "open_password";
$presentationInfo = PresentationFactory::getInstance()->getPresentationInfo($filePath);

if (!$presentationInfo->isPasswordProtected()) {
    echo("The presentation does not have an opening password.\n");
} elseif (!$presentationInfo->checkPassword($password)) {
    echo("The opening password is incorrect.\n");
} else {
    $loadOptions = new LoadOptions();
    $loadOptions->setPassword($password);

    $presentation = new Presentation($filePath, $loadOptions);
    try {
        echo("The presentation was validated and loaded successfully.\n");
    } finally {
        $presentation->dispose();
    }
}

ストリーム ワークフロー

PresentationFactory::getPresentationInfo のストリーム オーバーロードでも同様のワークフローが提供されます。ストリームから完全なプレゼンテーションを読み込む前に、シーク可能なストリームの位置をリセットしてください。

次の例は PPT ファイルを使用します:

use aspose\slides\LoadOptions;
use aspose\slides\Presentation;
use aspose\slides\PresentationFactory;

$password = "open_password";

$presentationStream = new Java("java.io.FileInputStream", "protected-presentation.ppt");
try {
    $presentationInfo = PresentationFactory::getInstance()->getPresentationInfo($presentationStream);

    if (!$presentationInfo->isPasswordProtected()) {
        echo("The presentation does not have an opening password.\n");
    } elseif (!$presentationInfo->checkPassword($password)) {
        echo("The opening password is incorrect.\n");
    } else {
        $presentationStream->getChannel()->position(0);

        $loadOptions = new LoadOptions();
        $loadOptions->setPassword($password);

        $presentation = new Presentation($presentationStream, $loadOptions);
        try {
            echo("The presentation was validated and loaded successfully.\n");
        } finally {
            $presentation->dispose();
        }
    }
} finally {
    $presentationStream->close();
}

checkPassword の戻り値

PresentationInfo::checkPassword は、プレゼンテーションにオープニング パスワードが設定され、提供されたパスワードが正しい場合にのみ true を返します。次の場合は false を返します:

  • パスワードが正しくない。
  • プレゼンテーションにオープニング パスワードが設定されていない。
  • 提供されたパスワードが null もしくは空文字列。

この動作は PPT と PPTX の両方で同じです。

読み込まれたプレゼンテーションが暗号化されているか確認する

正しいパスワードでプレゼンテーションを読み込んだ後、ProtectionManager::isEncrypted を調べて、元のプレゼンテーションが暗号化されていたか確認します。読み込み前にオープニング パスワード保護を検出するには、上記と同様に PresentationInfo::isPasswordProtected を使用します。

use aspose\slides\LoadOptions;
use aspose\slides\Presentation;

$loadOptions = new LoadOptions();
$loadOptions->setPassword("open_password");

$presentation = new Presentation("encrypted-pres.pptx", $loadOptions);
try {
    $isEncrypted = $presentation->getProtectionManager()->isEncrypted();
    echo("The presentation is encrypted: " . ($isEncrypted ? "true" : "false") . "\n");
} finally {
    $presentation->dispose();
}

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

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

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

FAQ

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

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

すべてのスライドを読み込まずにオープニング パスワードを検証できますか?

はい。プレゼンテーション情報を取得し、オープニング パスワード保護があるか確認してから、完全なプレゼンテーション インスタンスを作成せずにパスワードを検証できます。

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

はい、ただしプレゼンテーションが「ドキュメント プロパティの暗号化」設定なしで暗号化されている場合に限ります。その場合は、Manage Presentation Properties で説明されているドキュメント プロパティのみの読み込みモードを使用してください。

パスワード検証ワークフローは PPT と PPTX の両方に対応していますか?

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