当我从 java 代码对文件应用密码时,我遇到了数字签名验证的问题。在我的场景中,我正在获取已经具有数字签名的文件。 我想在数字签名的 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;
}