Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Apache PDF Box和现有pfx文件在PDF文件中添加数字签名_Java_Apache_Digital Signature_Pdfbox_Pfx - Fatal编程技术网

Java 使用Apache PDF Box和现有pfx文件在PDF文件中添加数字签名

Java 使用Apache PDF Box和现有pfx文件在PDF文件中添加数字签名,java,apache,digital-signature,pdfbox,pfx,Java,Apache,Digital Signature,Pdfbox,Pfx,我正在使用JAVA在pdf中添加数字签名。我已经为它浏览了很多API。但是我没有任何例子可以直接将现有的pfx文件添加到pdf中 我已尝试使用Apache PdfBox: PDSignature signature = null; File file = new File("path\\REPORT.pdf"); PDDocument doc=PDDocument.load(file); FileInputStream pkcs12Stream = new Fi

我正在使用JAVA在pdf中添加数字签名。我已经为它浏览了很多API。但是我没有任何例子可以直接将现有的pfx文件添加到pdf中

我已尝试使用Apache PdfBox:

    PDSignature signature = null;
    File file = new File("path\\REPORT.pdf");

    PDDocument doc=PDDocument.load(file);
    FileInputStream pkcs12Stream = new FileInputStream ("path\\abc.pfx");
    KeyStore store = KeyStore.getInstance("PKCS12");
    store.load(pkcs12Stream, "pwd@123".toCharArray());
    PDSignature sign=new PDSignature();
    byte[] bytes =  IOUtils.toByteArray(pkcs12Stream);
    sign.setContents(bytes);
    doc.addSignature(sign); // to add the signature in the pfx file.
    FileOutputStream fos = new FileOutputStream("path\\REPORT_signed.pdf");
    doc.saveIncremental(fos);
    pkcs12Stream.close();
现在,我没有得到任何异常,但它正在生成currapted签名文件,由于下面的状态,该文件将不会加载

 doc.addSignature(sign);
因为它不能转换成字节,这是我的假设

是否有任何方法,我可以使用现有的pfx文件,并生成签名的pdf文件


请就此向我提出建议

你用的是什么版本?如果要签名的字节当时不存在,如何添加签名?这个pfx文件来自哪里,它是从什么输入计算出来的?我有一个普通的pdf文件和pfx文件的输入。我已经生成了pfx文件。所以这两个文件是为我输入的。有字节,但它不包含任何值。它不是空的。所以它是空的(“”)。我在pdf中创建了一个数字签名,然后生成了这个pfx文件。现在我想通过Java来完成。doc保存着我的普通pdf文件。一旦我删除doc.addSignature(签名)行。它将生成普通pdf的副本。但每当我尝试添加签名时。我想你误解了PDF签名的工作原理。签名的字节流部分是保存PDF时创建的字节流。请参见此处的第5页:正确的签名方式在源代码下载中的CreateSignature.java示例中。外部签名是可能的(即使在示例中也支持),但需要技巧。绝对不可能先签名,然后再添加该签名。