Apresentações com Proteção por Senha em C++

Visão geral

Uma senha de abertura criptografa uma apresentação. A senha correta é necessária para carregar e visualizar o conteúdo da apresentação, portanto essa proteção fornece confidencialidade.

Uma senha de abertura difere de uma senha de proteção contra gravação. A proteção contra gravação restringe a modificação, mas não criptografa o conteúdo nem impede que a apresentação seja carregada. Para gerenciar senhas para modificar apresentações, veja Proteger Apresentações contra Gravação.

Os fluxos de trabalho abaixo se aplicam a apresentações PPT e PPTX. Os exemplos usam ambos os formatos onde seu comportamento baseado em arquivo e baseado em fluxo é importante.

Criptografar uma Apresentação com uma Senha de Abertura

Use IProtectionManager::Encrypt para atribuir uma senha de abertura. Em seguida, use IPresentation::Save para salvar a apresentação criptografada.

O exemplo a seguir criptografa uma apresentação 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()->Encrypt(u"open_password");
presentation->Save(u"encrypted-pres.pptx", SaveFormat::Pptx);

Manter as Propriedades do Documento Públicas

Por padrão, o Aspose.Slides inclui as propriedades do documento na criptografia da apresentação. IProtectionManager::set_EncryptDocumentProperties controla esse comportamento independentemente da criptografia do conteúdo dos slides. Passe false a esse método antes de chamar IProtectionManager::Encrypt quando um sistema de indexação, classificação, busca ou gerenciamento de documentos precisar ler os metadados sem a senha de abertura.

O exemplo a seguir cria uma apresentação PPTX criptografada deixando suas propriedades de documento internas públicas:

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

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

auto presentation = MakeObject<Presentation>();

auto properties = presentation->get_DocumentProperties();
properties->set_Author(u"Contoso Knowledge Management");
properties->set_Title(u"Quarterly Product Roadmap");
properties->set_Keywords(u"roadmap, planning, internal");

presentation->get_Slide(0)->set_Name(u"Encrypted presentation content");
presentation->get_ProtectionManager()->set_EncryptDocumentProperties(false);
presentation->get_ProtectionManager()->Encrypt(u"open_password");
presentation->Save(u"public-properties-encrypted.pptx", SaveFormat::Pptx);

presentation->Dispose();

Passar false para set_EncryptDocumentProperties não torna os slides, mestres, layouts, formas, mídia ou outro conteúdo da apresentação público. Afeta apenas as propriedades do documento. Para ler essas propriedades sem carregar o conteúdo criptografado, veja Gerenciar Propriedades da Apresentação.

Carregar uma Apresentação Criptografada

Defina LoadOptions::set_Password com a senha de abertura e passe as opções para Presentation ao carregar o arquivo. O carregamento falha quando uma senha de abertura é necessária, mas a senha fornecida está ausente ou incorreta.

#include <DOM/LoadOptions.h>
#include <DOM/Presentation.h>

using namespace Aspose::Slides;

auto loadOptions = System::MakeObject<LoadOptions>();
loadOptions->set_Password(u"open_password");

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

// Trabalhe com a apresentação descriptografada.

Remover a Criptografia de uma Apresentação

Carregue a apresentação com sua senha de abertura, chame IProtectionManager::RemoveEncryption, e salve o resultado. A apresentação salva pode então ser carregada sem senha.

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

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

auto loadOptions = System::MakeObject<LoadOptions>();
loadOptions->set_Password(u"open_password");

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

presentation->get_ProtectionManager()->RemoveEncryption();
presentation->Save(u"encryption-removed.pptx", SaveFormat::Pptx);

Validar uma Senha de Abertura Antes de Carregar

Use IPresentationFactory::GetPresentationInfo para obter IPresentationInfo sem criar uma instância completa da apresentação. Verifique IPresentationInfo::get_IsPasswordProtected antes de solicitar ou validar uma senha. Quando a proteção está presente, valide o valor fornecido com IPresentationInfo::CheckPassword.

Fluxo de Trabalho com Caminho de Arquivo

O exemplo a seguir valida uma senha de abertura para um arquivo PPTX, passa o valor validado para LoadOptions::set_Password, e então carrega a apresentação completa:

#include <DOM/IPresentationInfo.h>
#include <DOM/LoadOptions.h>
#include <DOM/Presentation.h>
#include <DOM/PresentationFactory.h>
#include <system/console.h>
#include <system/string.h>

using namespace Aspose::Slides;
using namespace System;

String filePath = u"protected-presentation.pptx";
String password = u"open_password";
auto presentationInfo = PresentationFactory::get_Instance()->GetPresentationInfo(filePath);

if (!presentationInfo->get_IsPasswordProtected())
{
    Console::WriteLine(u"The presentation does not have an opening password.");
}
else if (!presentationInfo->CheckPassword(password))
{
    Console::WriteLine(u"The opening password is incorrect.");
}
else
{
    auto loadOptions = MakeObject<LoadOptions>();
    loadOptions->set_Password(password);
    auto presentation = MakeObject<Presentation>(filePath, loadOptions);

    Console::WriteLine(u"The presentation was validated and loaded successfully.");
}

Fluxo de Trabalho com Stream

A sobrecarga de stream de IPresentationFactory::GetPresentationInfo fornece o mesmo fluxo de trabalho. Redefina a posição de um stream de busca antes de carregar a apresentação completa a partir desse stream.

O exemplo a seguir usa um arquivo PPT:

#include <DOM/IPresentationInfo.h>
#include <DOM/LoadOptions.h>
#include <DOM/Presentation.h>
#include <DOM/PresentationFactory.h>
#include <system/console.h>
#include <system/io/file.h>
#include <system/string.h>

using namespace Aspose::Slides;
using namespace System;
using namespace System::IO;

String password = u"open_password";
auto presentationStream = File::OpenRead(u"protected-presentation.ppt");
auto presentationInfo = PresentationFactory::get_Instance()->GetPresentationInfo(presentationStream);

if (!presentationInfo->get_IsPasswordProtected())
{
    Console::WriteLine(u"The presentation does not have an opening password.");
}
else if (!presentationInfo->CheckPassword(password))
{
    Console::WriteLine(u"The opening password is incorrect.");
}
else
{
    presentationStream->set_Position(0);

    auto loadOptions = MakeObject<LoadOptions>();
    loadOptions->set_Password(password);
    auto presentation = MakeObject<Presentation>(presentationStream, loadOptions);

    Console::WriteLine(u"The presentation was validated and loaded successfully.");
}

Valores de Retorno de CheckPassword

IPresentationInfo::CheckPassword retorna true apenas quando a apresentação tem uma senha de abertura e a senha fornecida está correta. Retorna false em cada um destes casos:

  • A senha está incorreta.
  • A apresentação não possui senha de abertura.
  • A senha fornecida é nula ou vazia.

O comportamento é o mesmo para apresentações PPT e PPTX.

Verificar se uma Apresentação Carregada está Criptografada

Depois de carregar uma apresentação com a senha correta, inspecione IProtectionManager::get_IsEncrypted para confirmar que a apresentação original estava criptografada. Para detectar a proteção por senha de abertura antes de carregar, use IPresentationInfo::get_IsPasswordProtected como mostrado acima.

#include <DOM/IProtectionManager.h>
#include <DOM/LoadOptions.h>
#include <DOM/Presentation.h>
#include <system/console.h>

using namespace Aspose::Slides;
using namespace System;

auto loadOptions = MakeObject<LoadOptions>();
loadOptions->set_Password(u"open_password");
auto presentation = MakeObject<Presentation>(u"encrypted-pres.pptx", loadOptions);

bool isEncrypted = presentation->get_ProtectionManager()->get_IsEncrypted();
Console::WriteLine(isEncrypted ? u"The presentation is encrypted." : u"The presentation is not encrypted.");

Recomendações de Segurança

Proteger uma Apresentação com Senha Online

  1. Abra o aplicativo Aspose.Slides Lock.
  2. Selecione ou carregue a apresentação.
  3. Digite uma senha para proteção de visualização.
  4. Opcionalmente, digite uma senha separada para proteção de edição.
  5. Aplique a proteção e faça download do arquivo resultante.

Perguntas Frequentes

Qual a diferença entre uma senha de abertura e uma senha de proteção contra gravação?

Uma senha de abertura criptografa a apresentação e é necessária para carregar seu conteúdo. Uma senha de proteção contra gravação restringe a modificação sem criptografar o conteúdo.

Posso validar uma senha de abertura sem carregar todos os slides?

Sim. Obtenha informações da apresentação, verifique se a proteção por senha de abertura está presente e valide a senha antes de criar uma instância completa da apresentação.

Um aplicativo pode ler metadados sem a senha de abertura?

Sim, mas somente quando a apresentação foi criptografada com set_EncryptDocumentProperties(false). Nesse caso, o aplicativo deve usar o modo de carregamento apenas das propriedades do documento descrito em Gerenciar Propriedades da Apresentação.

Os fluxos de trabalho de verificação de senha suportam tanto PPT quanto PPTX?

Sim. A detecção e validação de senha baseada em caminho de arquivo e em stream comportam‑se da mesma forma para apresentações PPT e PPTX.