Java 如何使用itext验证pdf的数字签名?

Java 如何使用itext验证pdf的数字签名?,java,itext,digital-signature,Java,Itext,Digital Signature,我不知道为什么这个代码是错误的。我使用的是itext中的代码,但在导入所有依赖项时给出了错误evin。下面是我在项目中使用的代码。请帮帮我,有人。 import java.io.IOException; 导入java.security.GeneralSecurityException; 导入java.security.security; 导入java.util.ArrayList; 导入org.bouncycastle.jce.provider.BouncyCastleProvider; 导入

我不知道为什么这个代码是错误的。我使用的是itext中的代码,但在导入所有依赖项时给出了错误evin。下面是我在项目中使用的代码。请帮帮我,有人。

import java.io.IOException;
导入java.security.GeneralSecurityException;
导入java.security.security;
导入java.util.ArrayList;
导入org.bouncycastle.jce.provider.BouncyCastleProvider;
导入com.itextpdf.text.log.LoggerFactory;
导入com.itextpdf.text.log.SysoLogger;
导入com.itextpdf.text.pdf.AcroFields;
导入com.itextpdf.text.pdf.PdfReader;
导入com.itextpdf.text.pdf.security.PdfPKCS7;
公共类pdfReader示例{
公共静态最终字符串EXAMPLE1=“/opt/doc.pdf”;
公共PdfPKCS7验证签名(AcroFields字段,字符串名称)引发GeneralSecurityException,IOException{
System.out.println(“签名覆盖整个文档:+字段.签名覆盖整个文档(名称));
System.out.println(“文档修订:“+fields.getRevision(name)+”of“+fields.getTotalRevisions());
PdfPKCS7 pkcs7=字段。验证签名(名称);
System.out.println(“完整性检查正常?”+pkcs7.verify());
返回pkcs7;
}
public void verifySignatures(字符串路径)引发IOException、GeneralSecurityException{
System.out.println(路径);
PdfReader reader=新PdfReader(路径);
AcroFields=reader.getAcroFields();
ArrayList name=fields.getSignatureNames();
for(字符串名称:名称){
System.out.println(“==”+name+“==”);
验证签名(字段、名称);
}
System.out.println();
}
公共静态void main(字符串[]args)引发IOException、GeneralSecurityException{
LoggerFactory.getInstance().setLogger(新的SysoLogger());
BouncyCastleProvider提供程序=新的BouncyCastleProvider();
Security.addProvider(提供者);
PdfReaderExample app=新的PdfReaderExample();
应用验证签名(示例1);
}
}
======签名2=====
签名覆盖整个文件:正确
文件修订:第1次,共1次
线程“main”java.lang.VerifyError中出现异常:(类:org/bouncycastle/cms/CMSSignedHelper,方法:签名:()V)函数参数不兼容
在org.bouncycastle.cms.CMSSignedData(未知来源)
位于org.bouncycastle.tsp.timestaken.getSignedData(未知源)
位于org.bouncycastle.tsp.TimeStampToken。(未知来源)
请访问com.itextpdf.text.pdf.security.PdfPKCS7。(PdfPKCS7.java:402)
请访问com.itextpdf.text.pdf.AcroFields.verifySignature(AcroFields.java:2419)
请访问com.itextpdf.text.pdf.AcroFields.verifySignature(AcroFields.java:2372)
在PdfReaderExample.verifySignature(PdfReaderExample.java:20)
验证签名(PdfReaderExample.java:32)
位于PdfReaderExample.main(PdfReaderExample.java:42)
进程已完成,退出代码为1
文件POM就是这个

<dependencies>
    <dependency>
        <groupId>com.sparkjava</groupId>
        <artifactId>spark-core</artifactId>
        <version>2.6.0</version>
    </dependency>

    <dependency>
            <groupId>com.itextpdf</groupId>
        <artifactId>itextpdf</artifactId>
        <version>5.5.12</version>
    </dependency>
    <dependency>
        <groupId>org.bouncycastle</groupId>
        <artifactId>bcprov-jdk15on</artifactId>
        <version>1.58</version>
    </dependency>

</dependencies>

com.sparkjava
火花芯
2.6.0
com.itextpdf
itextpdf
5.5.12
org.bouncycastle
bcprov-jdk15on
1.58

您的代码在哪里?您似乎使用了不兼容版本的bouncy castle库。您使用的是Maven还是Gradle?用POM发布您的POM或GradlefileMaven。5.5.12版的itextpdf。版本1.58中的bouncycastle。请查看iText POM并使用其中提到的bc版本。我怀疑是1.58。你的代码在哪里?你似乎使用了不兼容版本的bouncy castle库。你使用的是Maven还是Gradle?用POM发布您的POM或GradlefileMaven。5.5.12版的itextpdf。版本1.58中的bouncycastle。请查看iText POM并使用其中提到的bc版本。我怀疑是1.58。
<dependencies>
    <dependency>
        <groupId>com.sparkjava</groupId>
        <artifactId>spark-core</artifactId>
        <version>2.6.0</version>
    </dependency>

    <dependency>
            <groupId>com.itextpdf</groupId>
        <artifactId>itextpdf</artifactId>
        <version>5.5.12</version>
    </dependency>
    <dependency>
        <groupId>org.bouncycastle</groupId>
        <artifactId>bcprov-jdk15on</artifactId>
        <version>1.58</version>
    </dependency>

</dependencies>