0

当我从 java 代码对文件应用密码时,我遇到了数字签名验证的问题。在我的场景中,我正在获取已经具有数字签名的文件。 我想在数字签名的 pdf 文件上输入密码。

我可以输入密码,但担心的是现在数字签名没有得到验证。建议我如何实现它。有可能吗?

请让我知道是否需要我方进一步澄清......

4

2 回答 2

2

您不能在不破坏签名的情况下在先前签名的 PDF 上输入密码。签名检查签名数据是否作为字节流未更改。密码会更改这些字节。因此,如果之后确实应用了密码,签名将被破坏。

您可能会考虑同时进行签名和加密。

如果这在您的情况下是不可能的,您可以考虑将签名的 PDF 添加到 PDF 组合并加密该组合。在这种情况下,必须从投资组合中打开已签名的 PDF,这意味着要对其进行解密。

PS我在上述所有内容中都假设您的意思是常规 PDF 签名,而不是 XFA 签名。

于 2012-12-20T14:05:39.760 回答
-1

首先尝试将数字签名转换为字符串,然后使用这段代码

public static String passwordProtectFile(File srcFile, File destFile,
        String password) throws DocumentException, IOException {
    String message = null;

        PdfReader pdfReader = new PdfReader(new FileInputStream(srcFile));
        FileOutputStream fos = new FileOutputStream(destFile);
        PdfStamper stamper = new PdfStamper(pdfReader, fos);
        stamper.setEncryption(password.getBytes(), password.getBytes(),
                PdfWriter.ALLOW_PRINTING, PdfWriter.ENCRYPTION_AES_128
                        | PdfWriter.DO_NOT_ENCRYPT_METADATA);
        stamper.close();
        fos.close();
        pdfReader.close();
        message = "The Given File is Now Password Protected";

    return message;
}
于 2013-04-12T11:49:12.493 回答