Prezentace chráněné heslem v Pythonu

Přehled

Otevírací heslo šifruje prezentaci. Správné heslo je vyžadováno k načtení a zobrazení obsahu prezentace, takže tato ochrana poskytuje důvěrnost.

Otevírací heslo se liší od hesla pro zápisovou ochranu. Zápisová ochrana omezuje úpravy, ale nešifruje obsah ani nebrání načtení prezentace. Pro správu hesel pro úpravu prezentací viz Write-Protect Presentations.

Níže uvedené pracovní postupy platí jak pro prezentace PPT, tak PPTX. Příklady používají oba formáty tam, kde je důležité chování založené na souborech i na streamu.

Šifrování prezentace pomocí otevíracího hesla

K přiřazení otevíracího hesla použijte ProtectionManager.encrypt. Poté použijte Presentation.save k uložení šifrované prezentace.

Následující příklad šifruje PPTX prezentaci:

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

Zachovat dokumentové vlastnosti veřejné

Ve výchozím nastavení zahrnuje Aspose.Slides dokumentové vlastnosti do šifrování prezentace. Metoda ProtectionManager.setEncryptDocumentProperties řídí toto chování nezávisle na šifrování obsahu snímků. Před voláním ProtectionManager.encrypt předávejte False, pokud musí systém pro indexaci, klasifikaci, vyhledávání nebo správu dokumentů číst metadata bez otevíracího hesla.

Následující příklad vytvoří šifrovanou PPTX prezentaci a přitom ponechá její vestavěné dokumentové vlastnosti veřejné:

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

Předání False metodě ProtectionManager.setEncryptDocumentProperties neznamená, že snímky, mastery, rozložení, tvary, média nebo jiný obsah prezentace budou veřejné. Ovlivňuje jen dokumentové vlastnosti. Pro čtení těchto vlastností bez načítání šifrovaného obsahu viz Manage Presentation Properties.

Načtení šifrované prezentace

Nastavte LoadOptions.setPassword na otevírací heslo a předávejte možnosti do Presentation při načítání souboru. Načítání selže, pokud je vyžadováno otevírací heslo, ale poskytnuté heslo chybí nebo je nesprávné.

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:
    # Pracovat s dešifrovanou prezentací.
    pass
finally:
    presentation.dispose()

Odstranění šifrování z prezentace

Načtěte prezentaci s jejím otevíracím heslem, zavolejte ProtectionManager.removeEncryption a uložte výsledek. Uložená prezentace pak může být načtena bez hesla.

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

Ověření otevíracího hesla před načtením

Pomocí PresentationFactory.getPresentationInfo získáte PresentationInfo bez vytvoření kompletní instance prezentace. Před požádáním o heslo nebo jeho ověřením zkontrolujte PresentationInfo.isPasswordProtected. Pokud je ochrana přítomna, ověřte zadanou hodnotu pomocí PresentationInfo.checkPassword.

Pracovní postup se souborovou cestou

Následující příklad ověří otevírací heslo pro soubor PPTX, předá ověřenou hodnotu do LoadOptions.setPassword a poté načte kompletní prezentaci:

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

Pracovní postup se streamem

Přetížení pro stream u PresentationFactory.getPresentationInfo poskytuje stejný postup. Před načtením kompletní prezentace z tohoto streamu resetujte pozici vyhledatelného streamu.

Následující příklad používá soubor 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()

Návratové hodnoty metody checkPassword

PresentationInfo.checkPassword vrací True pouze když má prezentace otevírací heslo a zadané heslo je správné. V následujících případech vrací False:

  • Heslo je nesprávné.
  • Prezentace nemá otevírací heslo.
  • Zadané heslo je None nebo prázdné.

Chování je stejné pro prezentace PPT i PPTX.

Zkontrolujte, zda je načtená prezentace šifrovaná

Po načtení prezentace se správným heslem zkontrolujte ProtectionManager.isEncrypted, abyste potvrdili, že původní prezentace byla šifrována. Pro detekci ochrany otevíracím heslem před načtením použijte PresentationInfo.isPasswordProtected jak je uvedeno výše.

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

Doporučení pro zabezpečení

Ochrana prezentace heslem online

  1. Otevřete aplikaci Aspose.Slides Lock.
  2. Vyberte nebo nahrajte prezentaci.
  3. Zadejte heslo pro ochranu zobrazení.
  4. Volitelně zadejte samostatné heslo pro ochranu úprav.
  5. Použijte ochranu a stáhněte vzniklý soubor.

Často kladené otázky

Jaký je rozdíl mezi otevíracím heslem a heslem pro zápisovou ochranu?

Otevírací heslo šifruje prezentaci a je nutné k načtení jejího obsahu. Heslo pro zápisovou ochranu omezuje úpravy bez šifrování obsahu.

Mohu ověřit otevírací heslo bez načtení všech snímků?

Ano. Získejte informace o prezentaci, zkontrolujte, zda je přítomna ochrana otevíracím heslem, a ověřte heslo před vytvořením kompletní instance prezentace.

Může aplikace číst metadata bez otevíracího hesla?

Ano, ale pouze pokud byla prezentace šifrována s vypnutým šifrováním dokumentových vlastností. Aplikace pak musí použít režim načítání jen dokumentových vlastností popsaný v Manage Presentation Properties.

Podporují postupy ověřování hesla jak PPT, tak PPTX?

Ano. Detekce a ověřování hesla na základě cesty k souboru i streamu se chová stejně u prezentací PPT i PPTX.