Добавить цифровые подписи к презентациям в PHP
Цифровой сертификат используется для создания защищённой паролем презентации PowerPoint, отмеченной как созданная определённой организацией или лицом. Цифровой сертификат можно получить, обратившись в уполномоченную организацию — центр сертификации. После установки цифрового сертификата в систему его можно использовать для добавления цифровой подписи к презентации через Файл -> Информация -> Защитить презентацию:
Презентация может содержать более одной цифровой подписи. После того как цифровая подпись добавлена к презентации, в PowerPoint появляется специальное сообщение:
Чтобы подписать презентацию или проверить подлинность подписей презентации, Aspose.Slides API предоставляет класс DigitalSignature, класс DigitalSignatureCollection и метод Presentation::getDigitalSignatures. В настоящее время цифровые подписи поддерживаются только для формата PPTX.
Добавить цифровую подпись из PFX‑сертификата
Ниже приведён пример кода, демонстрирующий, как добавить цифровую подпись из PFX‑сертификата:
- Откройте файл PFX и передайте пароль PFX объекту DigitalSignature.
- Добавьте созданную подпись к объекту презентации.
# Открытие файла презентации
$pres = new Presentation();
try {
# Создать объект DigitalSignature с файлом PFX и паролем PFX
$signature = new DigitalSignature("testsignature1.pfx", "testpass1");
# Комментарий новой цифровой подписи
$signature->setComments("Aspose.Slides digital signing test.");
# Добавить цифровую подпись к презентации
$pres->getDigitalSignatures()->add($signature);
# Сохранить презентацию
$pres->save("SomePresentationSigned.pptx", SaveFormat::Pptx);
} finally {
$pres->dispose();
}
Теперь можно проверить, была ли презентация подписана цифровой подписью и не была изменена:
# Открыть презентацию
$pres = new Presentation("SomePresentationSigned.pptx");
try {
if (java_values($pres->getDigitalSignatures()->size()) > 0) {
$allSignaturesAreValid = true;
echo("Signatures used to sign the presentation: ");
# Check if all digital signatures are valid
foreach($pres->getDigitalSignatures() as $signature) {
echo($signature->getComments() . ", " . $signature->getSignTime()->toString() . " -- " . $signature->isValid() ? "VALID" : "INVALID");
$allSignaturesAreValid &= $signature->isValid();
}
if ($allSignaturesAreValid) {
echo("Presentation is genuine, all signatures are valid.");
} else {
echo("Presentation has been modified since signing.");
}
}
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
FAQ
Могу ли я удалить существующие подписи из файла?
Да. Коллекция цифровых подписей поддерживает удаление отдельных элементов и полную очистку; после сохранения файла в презентации не будет подписей.
Файл становится «только для чтения» после подписи?
Нет. Подпись сохраняет целостность и авторство, но не блокирует правки. Чтобы ограничить редактирование, комбинируйте её с “Только для чтения” или паролем.
Будет ли подпись отображаться правильно в разных версиях PowerPoint?
Подпись создаётся для контейнера OOXML (PPTX). Современные версии PowerPoint, поддерживающие подписи OOXML, корректно отображают статус таких подписей.