Apresentações Protegidas por Senha em Python
Visão geral
Uma senha de abertura criptografa uma apresentação. A senha correta é necessária para carregar e exibir o conteúdo da apresentação, portanto essa proteção fornece confidencialidade.
Uma senha de abertura é diferente 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, consulte Write-Protect Presentations.
Os fluxos de trabalho abaixo se aplicam a apresentações PPT e PPTX. Os exemplos utilizam ambos os formatos quando seu comportamento baseado em arquivos ou em streams é importante.
Criptografar uma Apresentação com uma Senha de Abertura
Use ProtectionManager.encrypt para atribuir uma senha de abertura. Em seguida, use Presentation.save para persistir a apresentação criptografada.
O exemplo a seguir criptografa uma apresentação PPTX:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat
presentation = Presentation("pres.pptx")
try:
presentation.getProtectionManager().encrypt("open_password")
presentation.save("encrypted-pres.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Manter as Propriedades do Documento Públicas
Por padrão, o Aspose.Slides inclui as propriedades do documento na criptografia da apresentação. O método ProtectionManager.setEncryptDocumentProperties controla esse comportamento de forma independente da criptografia do conteúdo dos slides. Passe False antes de chamar ProtectionManager.encrypt quando um sistema de indexação, classificação, pesquisa ou gerenciamento de documentos precisar ler os metadados sem a senha de abertura.
O exemplo a seguir cria uma apresentação PPTX criptografada mantendo suas propriedades de documento incorporadas públicas:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat
presentation = 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()
Passar False para ProtectionManager.setEncryptDocumentProperties não torna públicos os slides, masters, layouts, formas, mídia ou outro conteúdo da apresentação. Ele afeta apenas as propriedades do documento. Para ler essas propriedades sem carregar o conteúdo criptografado, consulte Manage Presentation Properties.
Carregar uma Apresentação Criptografada
Defina LoadOptions.setPassword 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.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import LoadOptions, Presentation
load_options = LoadOptions()
load_options.setPassword("open_password")
presentation = Presentation("encrypted-pres.pptx", load_options)
try:
# Trabalhe com a apresentação descriptografada.
pass
finally:
presentation.dispose()
Remover Criptografia de uma Apresentação
Carregue a apresentação com sua senha de abertura, chame ProtectionManager.removeEncryption e salve o resultado. A apresentação salva pode então ser carregada sem senha.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import LoadOptions, Presentation, SaveFormat
load_options = LoadOptions()
load_options.setPassword("open_password")
presentation = Presentation("encrypted-pres.pptx", load_options)
try:
presentation.getProtectionManager().removeEncryption()
presentation.save("encryption-removed.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Validar uma Senha de Abertura Antes de Carregar
Use PresentationFactory.getPresentationInfo para obter PresentationInfo sem criar uma instância completa da apresentação. Verifique PresentationInfo.isPasswordProtected antes de solicitar ou validar uma senha. Quando a proteção está presente, valide o valor fornecido com PresentationInfo.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.setPassword e então carrega a apresentação completa:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import LoadOptions, Presentation, PresentationFactory
file_path = "protected-presentation.pptx"
password = "open_password"
presentation_info = PresentationFactory.getInstance().getPresentationInfo(file_path)
if not presentation_info.isPasswordProtected():
print("The presentation does not have an opening password.")
elif not presentation_info.checkPassword(password):
print("The opening password is incorrect.")
else:
load_options = LoadOptions()
load_options.setPassword(password)
presentation = Presentation(file_path, load_options)
try:
print("The presentation was validated and loaded successfully.")
finally:
presentation.dispose()
Fluxo de Trabalho com Stream
A sobrecarga de stream de PresentationFactory.getPresentationInfo fornece o mesmo fluxo de trabalho. Redefina a posição de um stream buscável antes de carregar a apresentação completa a partir desse stream.
O exemplo a seguir usa um arquivo PPT:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import LoadOptions, Presentation, PresentationFactory
FileInputStream = jpype.JClass("java.io.FileInputStream")
password = "open_password"
presentation_stream = FileInputStream("protected-presentation.ppt")
try:
presentation_info = PresentationFactory.getInstance().getPresentationInfo(presentation_stream)
if not presentation_info.isPasswordProtected():
print("The presentation does not have an opening password.")
elif not presentation_info.checkPassword(password):
print("The opening password is incorrect.")
else:
presentation_stream.getChannel().position(0)
load_options = LoadOptions()
load_options.setPassword(password)
presentation = Presentation(presentation_stream, load_options)
try:
print("The presentation was validated and loaded successfully.")
finally:
presentation.dispose()
finally:
presentation_stream.close()
Valores de Retorno de checkPassword
PresentationInfo.checkPassword retorna True apenas quando a apresentação possui uma senha de abertura e a senha fornecida está correta. Retorna False em cada um desses casos:
- A senha está incorreta.
- A apresentação não possui uma senha de abertura.
- A senha fornecida é
Noneou vazia.
O comportamento é o mesmo para apresentações PPT e PPTX.
Verificar se uma Apresentação Carregada está Criptografada
Após carregar uma apresentação com a senha correta, inspeccione ProtectionManager.isEncrypted para confirmar que a apresentação original estava criptografada. Para detectar a proteção por senha de abertura antes do carregamento, use PresentationInfo.isPasswordProtected conforme mostrado acima.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import LoadOptions, Presentation
load_options = LoadOptions()
load_options.setPassword("open_password")
presentation = Presentation("encrypted-pres.pptx", load_options)
try:
is_encrypted = presentation.getProtectionManager().isEncrypted()
print(f"The presentation is encrypted: {is_encrypted}")
finally:
presentation.dispose()
Recomendações de Segurança
Security
Não registre senhas de abertura nem as inclua em mensagens de diagnóstico. Evite tentativas de validação repetidas e desnecessárias, mantenha as senhas na memória apenas pelo tempo necessário e reutilize um resultado de validação bem-sucedido ao carregar a apresentação imediatamente.
As propriedades públicas do documento podem revelar nomes de autores, títulos, assuntos, palavras‑chave, informações da empresa, comentários e valores personalizados mesmo que o conteúdo da apresentação esteja criptografado. Criptografe metadados sensíveis juntamente com a apresentação. Deixar as propriedades públicas deve ser uma decisão explícita, tomada somente quando os sistemas precisam indexar, classificar, pesquisar ou gerenciar o arquivo sem uma senha de abertura.
Proteger uma Apresentação com Senha Online
- Abra o aplicativo Aspose.Slides Lock.
- Selecione ou faça upload da apresentação.
- Digite uma senha para proteção de visualização.
- Opcionalmente, digite uma senha separada para proteção de edição.
- Aplique a proteção e faça o 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 as 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 a criptografia de propriedades do documento desativada. O aplicativo deve então usar o modo de carregamento apenas de propriedades do documento descrito em [Manage Presentation Properties].
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 ou em stream comportam‑se da mesma forma para apresentações PPT e PPTX.