Добавление цифровых подписей к презентациям на C++
Цифровой сертификат используется для создания презентации PowerPoint, защищённой паролем, помеченной как созданная определённой организацией или лицом. Цифровой сертификат можно получить, обратившись к уполномоченной организации — центру сертификации. После установки цифрового сертификата в систему им можно добавить цифровую подпись к презентации через Файл → Сведения → Защитить презентацию:
В презентации может быть более одной цифровой подписи. После того как цифровая подпись добавлена к презентации, в PowerPoint появляется специальное сообщение:
Для подписи презентации или проверки подлинности подписей презентации Aspose.Slides API предоставляет интерфейс IDigitalSignature, интерфейс IDigitalSignatureCollection и метод IPresentation.DigitalSignatures. В настоящее время цифровые подписи поддерживаются только для формата PPTX.
Добавить цифровую подпись из сертификата PFX
Ниже приведён пример кода, демонстрирующий, как добавить цифровую подпись из сертификата PFX:
- Откройте файл PFX и передайте пароль PFX объекту DigitalSignature.
- Добавьте созданную подпись к объекту презентации.
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, корректно отображают статус таких подписей.