Защита презентаций от записи в C++

Введение

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

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

Описанные в статье рабочие процессы применимы как к презентациям PPT, так и PPTX. В примерах используются файлы PPTX; при сохранении в PPT используйте расширение .ppt и соответствующий формат сохранения PPT.

Установить защиту от записи в презентации

Используйте IProtectionManager::SetWriteProtection для назначения пароля, позволяющего изменять презентацию. Сохранение презентации сохраняет настройку защиты.

Следующий пример устанавливает защиту от записи в презентации PPTX:

#include <DOM/IProtectionManager.h>
#include <DOM/Presentation.h>
#include <Export/SaveFormat.h>

using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;

auto presentation = System::MakeObject<Presentation>(u"pres.pptx");

presentation->get_ProtectionManager()->SetWriteProtection(u"modify_password");
presentation->Save(u"write-protected-pres.pptx", SaveFormat::Pptx);

Загрузка презентации с защитой от записи

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

#include <DOM/ISlideCollection.h>
#include <DOM/Presentation.h>
#include <system/console.h>

using namespace Aspose::Slides;
using namespace System;

auto presentation = MakeObject<Presentation>(u"write-protected-pres.pptx");

Console::WriteLine(u"Slide count: {0}", presentation->get_Slides()->get_Count());

Не передавайте пароль защиты от записи в LoadOptions::set_Password. Это свойство принимает пароль открытия для зашифрованного содержимого. Если у презентации есть оба типа защиты, передайте пароль открытия для её загрузки и обрабатывайте пароль защиты от записи отдельно.

Удалить защиту от записи из презентации

Используйте IProtectionManager::RemoveWriteProtection для снятия ограничения изменения, затем сохраните презентацию.

#include <DOM/IProtectionManager.h>
#include <DOM/Presentation.h>
#include <Export/SaveFormat.h>

using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;

auto presentation = System::MakeObject<Presentation>(u"write-protected-pres.pptx");

presentation->get_ProtectionManager()->RemoveWriteProtection();
presentation->Save(u"write-protection-removed.pptx", SaveFormat::Pptx);

Проверить, защищена ли презентация от записи

Чтобы изучить файл без создания полного экземпляра Presentation, вызовите IPresentationFactory::GetPresentationInfo и проверьте IPresentationInfo::get_IsWriteProtected. Свойство использует NullableBool и возвращает NullableBool::True, когда обнаружена защита от записи.

#include <DOM/IPresentationInfo.h>
#include <DOM/NullableBool.h>
#include <DOM/PresentationFactory.h>
#include <system/console.h>

using namespace Aspose::Slides;
using namespace System;

auto presentationInfo = PresentationFactory::get_Instance()->GetPresentationInfo(u"write-protected-pres.pptx");

if (presentationInfo->get_IsWriteProtected() == NullableBool::True)
{
    Console::WriteLine(u"The presentation is write protected.");
}
else
{
    Console::WriteLine(u"Write protection was not detected.");
}

Перегрузка метода для потока IPresentationFactory::GetPresentationInfo предоставляет ту же информацию для презентации, переданной в виде потока.

Проверить пароль защиты от записи

Используйте IPresentationInfo::CheckWriteProtection для проверки пароля изменения без загрузки полной презентации. Сначала проверьте IPresentationInfo::get_IsWriteProtected, чтобы приложение запрашивало или проверяло пароль только тогда, когда присутствует защита от записи.

#include <DOM/IPresentationInfo.h>
#include <DOM/NullableBool.h>
#include <DOM/PresentationFactory.h>
#include <system/console.h>

using namespace Aspose::Slides;
using namespace System;

auto presentationInfo = PresentationFactory::get_Instance()->GetPresentationInfo(u"write-protected-pres.pptx");

if (presentationInfo->get_IsWriteProtected() != NullableBool::True)
{
    Console::WriteLine(u"The presentation is not write protected.");
}
else if (presentationInfo->CheckWriteProtection(u"modify_password"))
{
    Console::WriteLine(u"The write-protection password is correct.");
}
else
{
    Console::WriteLine(u"The write-protection password is incorrect.");
}

IPresentationInfo::CheckWriteProtection проверяет только пароль защиты от записи. Он не проверяет пароль открытия и не определяет, может ли быть загружено зашифрованное содержимое. Напротив, IPresentationInfo::CheckPassword проверяет только пароль открытия. Если полная презентация уже загружена, IProtectionManager::CheckWriteProtection предоставляет эквивалентную проверку защиты от записи через менеджер защиты.

В производственных приложениях не записывайте пароли в журнал и не включайте их в диагностические сообщения. Избегайте ненужных повторных попыток проверки и храните пароли в памяти только в течение необходимого времени.

Часто задаваемые вопросы

Шифрует ли защита от записи презентацию?

Нет. Она ограничивает изменение, но оставляет содержимое презентации доступным для загрузки и просмотра.

Требуется ли пароль защиты от записи для открытия презентации?

Нет. Для загрузки зашифрованного содержимого презентации требуется только пароль открытия.

Может ли у презентации быть одновременно пароль открытия и пароль защиты от записи?

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