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

Обзор

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

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

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

Шифрование презентации с паролем открытия

Используйте ProtectionManager.encrypt для назначения пароля открытия. Затем используйте Presentation.save для сохранения зашифрованной презентации.

В следующем примере шифруется 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()

Оставить свойства документа общедоступными

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

В следующем примере создаётся зашифрованная PPTX презентация, при этом встроенные свойства документа остаются общедоступными:

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()

Передача False в ProtectionManager.setEncryptDocumentProperties не делает слайды, шаблоны, макеты, фигуры, медиа‑файлы или другое содержимое презентации общедоступными. Это влияет только на свойства документа. Чтобы прочитать эти свойства без загрузки зашифрованного содержимого, см. Manage Presentation Properties.

Загрузка зашифрованной презентации

Установите LoadOptions.setPassword в значение пароля открытия и передайте параметры в Presentation при загрузке файла. Загрузка завершается ошибкой, если требуется пароль открытия, но предоставленный пароль отсутствует или неверен.

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:
    # Работайте с расшифрованной презентацией.
    pass
finally:
    presentation.dispose()

Удаление шифрования из презентации

Загрузите презентацию с её паролем открытия, вызовите ProtectionManager.removeEncryption и сохраните результат. Сохранённую презентацию затем можно загружать без пароля.

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()

Проверка пароля открытия перед загрузкой

Используйте PresentationFactory.getPresentationInfo для получения PresentationInfo без создания полноценного экземпляра презентации. Проверьте PresentationInfo.isPasswordProtected перед запросом или проверкой пароля. При наличии защиты проверьте предоставленное значение с помощью PresentationInfo.checkPassword.

Рабочий процесс с путем к файлу

В следующем примере проверяется пароль открытия для файла PPTX, проверенное значение передаётся в LoadOptions.setPassword, после чего загружается полная презентация:

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()

Рабочий процесс с потоком

Перегрузка потока метода PresentationFactory.getPresentationInfo обеспечивает такой же рабочий процесс. Сбросьте позицию seekable‑потока перед загрузкой полной презентации из этого потока.

В следующем примере используется файл 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()

Значения, возвращаемые checkPassword

PresentationInfo.checkPassword возвращает True только когда у презентации установлен пароль открытия и предоставленный пароль правильный. Он возвращает False в каждом из следующих случаев:

  • Пароль неверен.
  • У презентации нет пароля открытия.
  • Переданный пароль равен None или пустой строке.

Поведение одинаково для PPT и PPTX презентаций.

Проверка, зашифрована ли загруженная презентация

После загрузки презентации с правильным паролем проверьте ProtectionManager.isEncrypted, чтобы убедиться, что исходная презентация была зашифрована. Чтобы обнаружить защиту паролем открытия до загрузки, используйте PresentationInfo.isPasswordProtected, как показано выше.

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()

Рекомендации по безопасности

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

  1. Откройте приложение Aspose.Slides Lock.
  2. Выберите или загрузите презентацию.
  3. Введите пароль для защиты просмотра.
  4. При желании введите отдельный пароль для защиты редактирования.
  5. Примените защиту и скачайте полученный файл.

FAQ

В чем разница между паролем открытия и паролем защиты от записи?

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

Могу ли я проверить пароль открытия без загрузки всех слайдов?

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

Можно ли приложению читать метаданные без пароля открытия?

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

Поддерживают ли сценарии проверки пароля как PPT, так и PPTX?

Да. Обнаружение и проверка пароля по пути к файлу и по потоку работают одинаково для PPT и PPTX презентаций.