【发布时间】:2023-03-12 20:37:01
【问题描述】:
我正在编写一个 Java Web 服务,它使用来自网络中某些客户端的 iText 对 PDF 文档进行签名。文档已正确签名,并且可以使用外部工具进行验证。但是,由于一些法律限制,为了将此文档存储在官方文档存储库中,我必须提供签名中的哈希/摘要消息。
我几乎尝试了任何方法来获取该哈希,但我能得到的最接近的方法是使用此代码 sn-p 获取整个签名 (CERT+HASH/DIGEST+TIMESTAMP) 作为字符串(请原谅字符串和[1] 因为我只是在测试如何做):
PdfReader reader = new PdfReader(path);
File temp = TempFileManager.createTempFile("aasd2sd", "asdasda222cff");
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(temp));
stamper.setRotateContents(false);
PdfString firma = (PdfString) stamper.getAcroFields().getSignatureDictionary("Signature1").get((PdfName)stamper.getAcroFields().getSignatureDictionary("Signature1").getKeys().toArray()[1]);
据我所知,我得到了一个 DER 编码的 PKCS7 签名。但是,我不知道如何解码/读取这些信息以达到紧急状态。
有什么想法吗?
谢谢, 危机。
【问题讨论】:
-
我的建议:谷歌“解码 pkcs7 java”
-
@Egl 感谢您的帮助,但我仍然遇到问题。通过谷歌搜索您的建议,我得到了与 [link]bouncycastle.org/docs/pkixdocs1.4/org/bouncycastle/cms/… 类似的代码。但是,当尝试使用我的文件初始化 CMSSignedData 时,我得到一个 org.bouncycastle.cms.CMSException: IOException reading content。