Zabezpieczanie prezentacji hasłem w Pythonie

Przegląd

Hasło otwierające szyfruje prezentację. Poprawne hasło jest wymagane do załadowania i wyświetlenia zawartości prezentacji, dlatego ta ochrona zapewnia poufność.

Hasło otwierające różni się od hasła ochrony przed zapisem. Ochrona przed zapisem ogranicza możliwość modyfikacji, ale nie szyfruje zawartości ani nie uniemożliwia załadowania prezentacji. Aby zarządzać hasłami służącymi do modyfikacji prezentacji, zobacz Write-Protect Presentations.

Poniższe przepływy pracy mają zastosowanie zarówno do prezentacji PPT, jak i PPTX. Przykłady używają obu formatów, gdy istotne jest ich zachowanie w trybie opartym na pliku i strumieniu.

Zaszyfruj prezentację przy użyciu hasła otwierającego

Użyj ProtectionManager.encrypt, aby przypisać hasło otwierające. Następnie użyj Presentation.save, aby zapisać zaszyfrowaną prezentację.

Poniższy przykład szyfruje prezentację PPTX:

import aspose.slides as slides

with slides.Presentation("pres.pptx") as presentation:
    presentation.protection_manager.encrypt("open_password")
    presentation.save("encrypted-pres.pptx", slides.export.SaveFormat.PPTX)

Utrzymaj właściwości dokumentu jako publiczne

Domyślnie Aspose.Slides włącza właściwości dokumentu do szyfrowania prezentacji. Właściwość ProtectionManager.encrypt_document_properties kontroluje to zachowanie niezależnie od szyfrowania zawartości slajdów. Ustaw ją na False przed wywołaniem ProtectionManager.encrypt, gdy system indeksowania, klasyfikacji, wyszukiwania lub zarządzania dokumentami musi odczytywać metadane bez hasła otwierającego.

Poniższy przykład tworzy zaszyfrowaną prezentację PPTX, pozostawiając jej wbudowane właściwości dokumentu jako publiczne:

import aspose.slides as slides

with slides.Presentation() as presentation:
    properties = presentation.document_properties
    properties.author = "Contoso Knowledge Management"
    properties.title = "Quarterly Product Roadmap"
    properties.keywords = "roadmap, planning, internal"

    presentation.slides[0].name = "Encrypted presentation content"
    presentation.protection_manager.encrypt_document_properties = False
    presentation.protection_manager.encrypt("open_password")
    presentation.save("public-properties-encrypted.pptx", slides.export.SaveFormat.PPTX)

Ustawienie encrypt_document_properties na False nie powoduje, że slajdy, wzorce, układy, kształty, multimedia ani inna zawartość prezentacji stają się publiczne. Dotyczy to wyłącznie właściwości dokumentu. Aby odczytać te właściwości bez ładowania zaszyfrowanej zawartości, zobacz Manage Presentation Properties.

Załaduj zaszyfrowaną prezentację

Ustaw LoadOptions.password na hasło otwierające i przekaż te opcje do Presentation podczas ładowania pliku. Ładowanie nie powiedzie się, gdy wymagane jest hasło otwierające, ale podane hasło jest brakujące lub nieprawidłowe.

import aspose.slides as slides

load_options = slides.LoadOptions()
load_options.password = "open_password"

with slides.Presentation("encrypted-pres.pptx", load_options) as presentation:
    # Pracuj z odszyfrowaną prezentacją.
    pass

Usuń szyfrowanie z prezentacji

Załaduj prezentację przy użyciu hasła otwierającego, wywołaj ProtectionManager.remove_encryption i zapisz wynik. Zapisana prezentacja może być następnie ładowana bez hasła.

import aspose.slides as slides

load_options = slides.LoadOptions()
load_options.password = "open_password"

with slides.Presentation("encrypted-pres.pptx", load_options) as presentation:
    presentation.protection_manager.remove_encryption()
    presentation.save("encryption-removed.pptx", slides.export.SaveFormat.PPTX)

Zweryfikuj hasło otwierające przed ładowaniem

Użyj PresentationFactory.get_presentation_info, aby uzyskać PresentationInfo bez tworzenia pełnej instancji prezentacji. Sprawdź PresentationInfo.is_password_protected przed żądaniem lub weryfikacją hasła. Gdy ochrona jest obecna, zweryfikuj podaną wartość za pomocą PresentationInfo.check_password.

Workflow przy ścieżce pliku

Poniższy przykład weryfikuje hasło otwierające dla pliku PPTX, przekazuje zweryfikowaną wartość do LoadOptions.password, a następnie ładuje pełną prezentację:

import aspose.slides as slides

file_path = "protected-presentation.pptx"
password = "open_password"
presentation_info = slides.PresentationFactory.instance.get_presentation_info(file_path)

if not presentation_info.is_password_protected:
    print("The presentation does not have an opening password.")
elif not presentation_info.check_password(password):
    print("The opening password is incorrect.")
else:
    load_options = slides.LoadOptions()
    load_options.password = password

    with slides.Presentation(file_path, load_options) as presentation:
        print("The presentation was validated and loaded successfully.")

Workflow strumieniowy

Przeciążenie strumieniowe PresentationFactory.get_presentation_info zapewnia ten sam przepływ pracy. Zresetuj pozycję strumienia umożliwiającego przeszukiwanie przed załadowaniem pełnej prezentacji z tego strumienia.

Poniższy przykład używa pliku PPT:

import aspose.slides as slides

password = "open_password"

with open("protected-presentation.ppt", "rb") as presentation_stream:
    presentation_info = slides.PresentationFactory.instance.get_presentation_info(presentation_stream)

    if not presentation_info.is_password_protected:
        print("The presentation does not have an opening password.")
    elif not presentation_info.check_password(password):
        print("The opening password is incorrect.")
    else:
        presentation_stream.seek(0)
        load_options = slides.LoadOptions()
        load_options.password = password

        with slides.Presentation(presentation_stream, load_options) as presentation:
            print("The presentation was validated and loaded successfully.")

Wartości zwracane przez CheckPassword

PresentationInfo.check_password zwraca True tylko wtedy, gdy prezentacja posiada hasło otwierające i podane hasło jest prawidłowe. Zwraca False w każdym z następujących przypadków:

  • Hasło jest nieprawidłowe.
  • Prezentacja nie posiada hasła otwierającego.
  • Podane hasło jest None lub puste.

Zachowanie jest takie samo dla prezentacji PPT i PPTX.

Sprawdź, czy załadowana prezentacja jest zaszyfrowana

Po załadowaniu prezentacji przy użyciu poprawnego hasła, sprawdź ProtectionManager.is_encrypted, aby potwierdzić, że źródłowa prezentacja była zaszyfrowana. Aby wykryć ochronę hasłem otwierającym przed ładowaniem, użyj PresentationInfo.is_password_protected jak pokazano powyżej.

import aspose.slides as slides

load_options = slides.LoadOptions()
load_options.password = "open_password"

with slides.Presentation("encrypted-pres.pptx", load_options) as presentation:
    is_encrypted = presentation.protection_manager.is_encrypted
    print("The presentation is encrypted: " + str(is_encrypted))

Zalecenia dotyczące bezpieczeństwa

Zabezpiecz prezentację hasłem online

  1. Otwórz aplikację Aspose.Slides Lock.
  2. Wybierz lub prześlij prezentację.
  3. Wprowadź hasło chroniące widok.
  4. Opcjonalnie wprowadź oddzielne hasło chroniące edycję.
  5. Zastosuj ochronę i pobierz wynikowy plik.

FAQ

Jaka jest różnica między hasłem otwierającym a hasłem ochrony przed zapisem?

Hasło otwierające szyfruje prezentację i jest wymagane do załadowania jej zawartości. Hasło ochrony przed zapisem ogranicza możliwość modyfikacji bez szyfrowania zawartości.

Czy mogę zweryfikować hasło otwierające bez ładowania wszystkich slajdów?

Tak. Uzyskaj informacje o prezentacji, sprawdź, czy istnieje ochrona hasłem otwierającym, i zweryfikuj hasło przed utworzeniem pełnej instancji prezentacji.

Czy aplikacja może odczytać metadane bez hasła otwierającego?

Tak, ale tylko wtedy, gdy prezentacja została zaszyfrowana z ustawieniem encrypt_document_properties równym False. Aplikacja musi wtedy użyć trybu ładowania wyłącznie właściwości dokumentu opisanego w Manage Presentation Properties.

Czy przepływy weryfikacji haseł obsługują zarówno PPT, jak i PPTX?

Tak. Wykrywanie i weryfikacja haseł oparte na ścieżce pliku oraz na strumieniu zachowują się tak samo dla prezentacji PPT i PPTX.