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
Nonenebo 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í
Zabezpečení
Nevyplňujte (logujte) otevírací hesla ani je nezahrnujte do diagnostických zpráv. Vyhněte se zbytečným opakovaným pokusům o ověření, uchovávejte hesla v paměti pouze po dobu, kterou potřebujete, a při okamžitém načítání prezentace znovu použijte úspěšný výsledek ověření.
Veřejné dokumentové vlastnosti mohou odhalit jména autorů, názvy, předměty, klíčová slova, informace o společnosti, komentáře a vlastní hodnoty, i když je obsah prezentace šifrován. Šifrujte citlivá metadata spolu s prezentací. Zanechání vlastností veřejných by mělo být explicitním rozhodnutím učiněným jen tehdy, když systémy musí indexovat, klasifikovat, vyhledávat nebo spravovat soubor bez otevíracího hesla.
Ochrana prezentace heslem online
- Otevřete aplikaci Aspose.Slides Lock.
- Vyberte nebo nahrajte prezentaci.
- Zadejte heslo pro ochranu zobrazení.
- Volitelně zadejte samostatné heslo pro ochranu úprav.
- 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.