将密码应用于具有java数字签名的PDF文件

将密码应用于具有java数字签名的PDF文件,java,pdf,itext,Java,Pdf,Itext,当我从java代码向文件应用密码时,我面临着数字签名验证的问题。 在我的场景中,我得到的文件已经有了数字签名。 我想在数字签名的pdf文件中输入密码。 我可以输入密码,但担心的是,现在的数字签名没有得到验证。 给我建议一些我们如何实现它的方法。 有可能吗 如果需要我方进一步澄清,请告知我……您不能在先前签名的PDF上输入密码,而不破坏签名。签名检查签名数据是否作为字节流保持不变。密码会更改这些字节。因此,如果随后应用了密码,则签名将中断 您可以考虑同时签署和加密。 如果在你的情况下是不可能的,你

当我从java代码向文件应用密码时,我面临着数字签名验证的问题。 在我的场景中,我得到的文件已经有了数字签名。 我想在数字签名的pdf文件中输入密码。

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


如果需要我方进一步澄清,请告知我……

您不能在先前签名的PDF上输入密码,而不破坏签名。签名检查签名数据是否作为字节流保持不变。密码会更改这些字节。因此,如果随后应用了密码,则签名将中断

您可以考虑同时签署和加密。

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


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

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

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;
}

谢谢老板。我可以同时获得签名和加密的信息吗..如果您的工作流程允许您在签名创建过程中进行加密,并且如果该步骤是使用iText执行的,那么您的createSignature调用将返回一个PdfStamper,您可以设置该PdfStamper以使用加密。我不知道其他pdf签名解决方案是如何做到这一点的。