2011-06-01 66 views
2

我試圖進行數字簽名使用PDFBOX(和BouncyCastle的)PDFBox的+充氣城堡簽署PDF

我已經創建密鑰庫和證書(加密?)PDF想要使用PDFBOX

org.apache.pdfbox.PDFBox Encrypt -certFile test-cert.cer -canModify false -canPrint false test.pdf test-signed-out.pdf 

,我已經有了:

Encrypt failed with the following exception: 
org.apache.pdfbox.exceptions.COSVisitorException: Cannot find any provider supporting 1.2.840.10040.4.1 
    at org.apache.pdfbox.pdfwriter.COSWriter.write(COSWriter.java:1025) 
    at org.apache.pdfbox.pdmodel.PDDocument.save(PDDocument.java:914) 
    at org.apache.pdfbox.pdmodel.PDDocument.save(PDDocument.java:895) 
    at org.apache.pdfbox.Encrypt.encrypt(Encrypt.java:189) 
    at org.apache.pdfbox.Encrypt.main(Encrypt.java:53) 
    at org.apache.pdfbox.PDFBox.main(PDFBox.java:40) 
org.apache.pdfbox.exceptions.CryptographyException: Cannot find any provider supporting 1.2.840.10040.4.1 
    at org.apache.pdfbox.pdmodel.encryption.PublicKeySecurityHandler.prepareDocumentForEncryption(PublicKeySecurityHandler.java:344) 
    at org.apache.pdfbox.pdfwriter.COSWriter.write(COSWriter.java:1016) 

什麼問題?我做錯了什麼?

我可以使用PDFBox的ShowCertificate上已經簽約(由iText的)PDF: 簽名算法:SHA1的DSA,OID = 1.2.840.10040.4.3

回答

1

我不熟悉PDFBox的,但我覺得你的問題是, 「加密」命令行工具不會執行簽名。您似乎已創建DSA證書/密鑰。 DSA用於數字簽名。異常反映了DSA不是有效的加密算法。

我看到一些提及使用PDFBox進行簽名,但我不認爲這是方式。

-1

您將需要添加提供者。

你可以用單行代碼來做到這一點。

Security.addProvider(new BouncyCastleProvider());

安全 - 從java.security.Security

顯然,你需要先導入BouncyCastleProviderStuff。


哎呀 - 我只是注意到你正在從命令行使用一些PDFBox工具。 不知道如何在那裏添加提供程序。

+0

請參考文章:http://stackoverflow.com/questions/22354607/how-to-digitally-sign-a-dynamically-created-pdf-document-using-pdfbox – AVA 2014-04-17 11:36:33