PowerPoint中的数字签名

数字证书用于创建一个密码保护的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. 将创建的签名添加到演示文稿对象中。

#[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:
    # 使用PFX文件和PFX密码创建DigitalSignature对象 
    signature = slides.DigitalSignature(path + "testsignature1.pfx", "testpass1")

    # 注释新的数字签名
    signature.comments = "Aspose.Slides数字签名测试。"

    # 将数字签名添加到演示文稿
    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("用于签署演示文稿的签名: ")
        # 检查所有数字签名是否有效
        for signature in pres.digital_signatures :
            print(signature.certificate.subject_name.name + ", "
                    + signature.sign_time.strftime("yyyy-MM-dd HH:mm") + " -- " + "有效" if signature.is_valid else "无效")
            allSignaturesAreValid = allSignaturesAreValid and signature.is_valid
        

        if allSignaturesAreValid:
            print("演示文稿是真实的,所有签名都是有效的。")
        else:
            print("演示文稿在签署后已被修改。")