Добавление цифровых подписей к презентациям на C++

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

todo:image_alt_text

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

todo:image_alt_text

Для подписи презентации или проверки подлинности подписей презентации Aspose.Slides API предоставляет интерфейс IDigitalSignature, интерфейс IDigitalSignatureCollection и метод IPresentation.DigitalSignatures. В настоящее время цифровые подписи поддерживаются только для формата PPTX.

Добавить цифровую подпись из сертификата PFX

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

  1. Откройте файл PFX и передайте пароль PFX объекту DigitalSignature.
  2. Добавьте созданную подпись к объекту презентации.
auto pres = System::MakeObject<Presentation>();

// Создать объект DigitalSignature с файлом PFX и паролем PFX 
auto signature = System::MakeObject<DigitalSignature>(u"testsignature1.pfx", u"testpass1");

// Комментарий к новой цифровой подписи
signature->set_Comments(u"Aspose.Slides digital signing test.");

// Добавить цифровую подпись к презентации
pres->get_DigitalSignatures()->Add(signature);

// Сохранить презентацию
pres->Save(u"SomePresentationSigned.pptx", SaveFormat::Pptx);

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

// Открыть презентацию
auto pres = System::MakeObject<Presentation>(u"SomePresentationSigned.pptx");

if (pres->get_DigitalSignatures()->get_Count() > 0)
{
    bool allSignaturesAreValid = true;

    Console::WriteLine(u"Signatures used to sign the presentation: ");

    // Проверить, являются ли все цифровые подписи действительными
    for (auto signature : pres->get_DigitalSignatures())
    {
        Console::WriteLine(signature->get_Certificate()->get_SubjectName()->get_Name() 
            + u", " 
            + signature->get_SignTime().ToString(u"yyyy-MM-dd HH:mm") 
            + u" -- " 
            + (signature->get_IsValid() ? System::String(u"VALID") : System::String(u"INVALID")));
        allSignaturesAreValid &= signature->get_IsValid();
    }

    if (allSignaturesAreValid)
    {
        Console::WriteLine(u"Presentation is genuine, all signatures are valid.");
    }
    else
    {
        Console::WriteLine(u"Presentation has been modified since signing.");
    }
}

FAQ

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

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

Станет ли файл «только для чтения» после подписи?

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

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

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