我正在使用iTextpdf使用pkcss11 usb令牌证书加密/解密PDF。
以下是我的加密和解密方法
public void encryptPdf(String src, String dest)
throws IOException, DocumentException, CertificateException {
PdfReader reader = new PdfReader(src);
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
Certificate cert = getPublicCertificate("C:\\Users\\USER\\Documents\\NetBeansProjects\\test\\src\\lk_enc.cer");
stamper.setEncryption(new Certificate[]{cert},
new int[]{PdfWriter.ALLOW_PRINTING}, PdfWriter.ENCRYPTION_AES_128);
stamper.close();
reader.close();
}
public void decryptPdf(String src, String dest)
throws IOException, DocumentException, GeneralSecurityException,CMSException {
try{
// decrypt(getPrivateKey(), DESTINATION_FILE, DECRYPTED_FILE);
PrivateKey pkc = getPrivateKey();
PdfReader reader = new PdfReader(src,
getPublicCertificate("C:\\Users\\USER\\Documents\\NetBeansProjects\\test\\src\\lk_enc.cer"), pkc, "SunPKCS11-eToken");
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
stamper.close();
reader.close();
}catch(Exception ex){
System.out.println(ex);
}
}
我使用的是itextpdf 5.2.1和bc 1.46版本。使用encryptPdf()方法加密的pdf解密工作正常。
但是decryptPdf()mehtod失败并出错 com.itextpdf.text.exceptions.InvalidPdfException:消息中的密钥无效 当使用以Adobe dc pro(128 AES)加密的pdf作为源文件时。
来源PDF
1.PDF encrypted with encryptPdf() method
2.PDF encrypted with adobe dc pro with AES 128bit
提前致谢