在 Java 中为演示文稿添加数字签名

数字证书 用于创建受密码保护的 PowerPoint 演示文稿,并标记为由特定组织或个人创建。可以通过联系授权机构——证书颁发机构来获取数字证书。将数字证书安装到系统后,可通过 文件 -> 信息 -> 保护演示文稿 为演示文稿添加数字签名:

todo:image_alt_text

演示文稿可能包含多个数字签名。数字签名添加到演示文稿后,PowerPoint 中会出现一条特殊信息:

todo:image_alt_text

要对演示文稿进行签名或检查演示文稿签名的真实性,Aspose.Slides API 提供了IDigitalSignature 接口、IDigitalSignatureCollection 接口和IPresentation.getDigitalSignatures 方法。目前,仅在 PPTX 格式中支持数字签名。

从 PFX 证书添加数字签名

以下代码示例演示了如何从 PFX 证书添加数字签名:

  1. 打开 PFX 文件并将 PFX 密码传递给DigitalSignature 对象。
  2. 将创建的签名添加到演示文稿对象。
// 打开演示文稿文件
Presentation pres = new Presentation();
try {
    // 使用 PFX 文件和 PFX 密码创建 DigitalSignature 对象
    DigitalSignature 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();
}

现在可以检查演示文稿是否已数字签名且未被修改:

// 打开演示文稿
Presentation pres = new Presentation("SomePresentationSigned.pptx");
try {
    if (pres.getDigitalSignatures().size() > 0)
    {
        boolean allSignaturesAreValid = true;

        System.out.println("Signatures used to sign the presentation: ");

        // 检查所有数字签名是否有效
        for (IDigitalSignature signature : pres.getDigitalSignatures())
        {
            System.out.println(signature.getComments() + ", "
                    + signature.getSignTime().toString() + " -- " + (signature.isValid() ? "VALID" : "INVALID"));
            allSignaturesAreValid &= signature.isValid();
        }

        if (allSignaturesAreValid)
            System.out.println("Presentation is genuine, all signatures are valid.");
        else
            System.out.println("Presentation has been modified since signing.");
    }
} finally {
    if (pres != null) pres.dispose();
}

常见问题

我可以移除文件中的现有签名吗?

可以。数字签名集合支持删除单个项目全部清除;保存文件后,演示文稿将不再有签名。

签名后文件会变成“只读”吗?

不会。签名能够维护完整性和作者身份,但不会阻止编辑。若需限制编辑,可结合“只读"或密码使用。

签名在不同版本的 PowerPoint 中会正确显示吗?

签名是为 OOXML(PPTX)容器创建的。支持 OOXML 签名的现代 PowerPoint 版本会正确显示此类签名的状态。