Добавление цифровых подписей к презентациям с помощью Python

Цифровой сертификат используется для создания защищённой паролем презентации PowerPoint, отмеченной как созданная определённой организацией или лицом. Цифровой сертификат можно получить, обратившись к уполномоченной организации — удостоверяющему центру. После установки цифрового сертификата в систему его можно использовать для добавления цифровой подписи к презентации через Файл -> Сведения -> Защитить презентацию:

todo:image_alt_text

Презентация может содержать более одной цифровой подписи. После того как цифровая подпись добавлена к презентации, в PowerPoint появится специальное сообщение:

todo:image_alt_text

Для подписи презентации или проверки подлинности её подписей Aspose.Slides API предоставляет класс DigitalSignature , класс DigitalSignatureCollection и свойство Presentation.digital_signatures . В настоящее время цифровые подписи поддерживаются только для формата PPTX.

Добавление цифровой подписи из сертификата PFX

Ниже приведён пример кода, демонстрирующий, как добавить цифровую подпись из сертификата PFX:

  1. Откройте файл PFX и передайте пароль PFX объекту DigitalSignature .
  2. Добавьте созданную подпись к объекту презентации.

#[TODO:Exception] RuntimeError: Ошибка прокси (FileNotFoundException): Не удалось загрузить файл или сборку 'System.Security.Cryptography.Xml, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'. Файл не найден.

import aspose.slides as slides

with slides.Presentation() as pres:
    # Создать объект DigitalSignature с файлом PFX и паролем PFX 
    signature = slides.DigitalSignature(path + "testsignature1.pfx", "testpass1")

    # Комментарий новой цифровой подписи
    signature.comments = "Aspose.Slides digital signing test."

    # Добавить цифровую подпись в презентацию
    pres.digital_signatures.add(signature)

    # сохранить презентацию
    pres.save("SomePresentationSigned.pptx", slides.export.SaveFormat.PPTX)

Теперь можно проверить, была ли презентация подписана цифровой подписью и не была изменена:

# Открыть презентацию
with slides.Presentation("SomePresentationSigned.pptx") as pres:
    if len(pres.digital_signatures) > 0:
        allSignaturesAreValid = True

        print("Signatures used to sign the presentation: ")
        # Проверить, являются ли все цифровые подписи действительными
        for signature in pres.digital_signatures :
            print(signature.certificate.subject_name.name + ", "
                    + signature.sign_time.strftime("yyyy-MM-dd HH:mm") + " -- " + "VALID" if signature.is_valid else "INVALID")
            allSignaturesAreValid = allSignaturesAreValid and signature.is_valid
        

        if allSignaturesAreValid:
            print("Presentation is genuine, all signatures are valid.")
        else:
            print("Presentation has been modified since signing.")

Вопросы и ответы

Могу ли я удалить существующие подписи из файла?

Да. Коллекция цифровых подписей поддерживает удаление отдельных элементов и полную очистку ; после сохранения файла в презентации не будет подписей.

Становится ли файл “только для чтения” после подписи?

Нет. Подпись сохраняет целостность и авторство, но не блокирует редактирование. Чтобы ограничить редактирование, сочетайте её с “Только для чтения” или паролем.

Будет ли подпись отображаться корректно в разных версиях PowerPoint?

Подпись создаётся для контейнера OOXML (PPTX). Современные версии PowerPoint, поддерживающие подписи OOXML, корректно отображают их статус.