当我从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;
}