Защита презентаций от записи в 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 предоставляет эквивалентную проверку защиты от записи через менеджер защиты.
В производственных приложениях не записывайте пароли в журнал и не включайте их в диагностические сообщения. Избегайте ненужных повторных попыток проверки и храните пароли в памяти только в течение необходимого времени.
Смотрите также
Часто задаваемые вопросы
Шифрует ли защита от записи презентацию?
Нет. Она ограничивает изменение, но оставляет содержимое презентации доступным для загрузки и просмотра.
Требуется ли пароль защиты от записи для открытия презентации?
Нет. Для загрузки зашифрованного содержимого презентации требуется только пароль открытия.
Может ли у презентации быть одновременно пароль открытия и пароль защиты от записи?
Да. Передайте пароль открытия через параметры загрузки, чтобы открыть зашифрованную презентацию, и проверяйте пароль защиты от записи отдельно, когда требуется авторизация на изменение.