在 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>();

// 使用 PFX 檔案和 PFX 密碼建立 DigitalSignature 物件
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)容器建立的。支援 OOXML 簽章的現代 PowerPoint 版本會正確顯示此類簽章的狀態。