Защита презентаций паролем в PHP

Обзор

Пароль для открытия шифрует презентацию. Правильный пароль требуется для загрузки и просмотра содержимого презентации, поэтому эта защита обеспечивает конфиденциальность.

Пароль для открытия отличается от пароля защиты от записи. Защита от записи ограничивает модификацию, но не шифрует содержимое и не препятствует загрузке презентации. Для управления паролями при изменении презентаций см. Write-Protect Presentations.

Приведённые ниже сценарии применимы как к презентациям 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();
}

Передача false в ProtectionManager::setEncryptDocumentProperties не делает публичными слайды, шаблоны, макеты, фигуры, медиа или другое содержимое презентации. Она влияет только на свойства документа. Чтобы читать эти свойства без загрузки зашифрованного содержимого, см. 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.