Java org.bouncycastle.asn1.ASN1ObjectIdentifier';的签名者信息与签名者信息不匹配
当我从我的代码库调用Java org.bouncycastle.asn1.ASN1ObjectIdentifier';的签名者信息与签名者信息不匹配,java,maven,itext,Java,Maven,Itext,当我从我的代码库调用PdfEncryptor.encrypt()时,我面临上述异常。因此,我发现这种情况通常是由于itextpdf和bouncycastle jar的错误组合造成的。但我在下面提到 我认为这是正确的 <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version&
PdfEncryptor.encrypt()
时,我面临上述异常。因此,我发现这种情况通常是由于itextpdf和bouncycastle jar的错误组合造成的。但我在下面提到
我认为这是正确的
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.1.3</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk16</artifactId>
<version>1.46</version>
</dependency>
<dependency>
<groupId>com.test</groupId>
<artifactId>test</artifactId>
<version>1.0.0</version>
</dependency>
com.itextpdf
itextpdf
5.1.3
org.bouncycastle
bcprov-jdk16
1.46
com.test
测试
1.0.0
我们通过其他项目(测试)间接地依赖itext。
“测试”项目具有以下条目
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
<version>2.0.4</version>
</dependency>
com.lowagie
文字
2.0.4
堆栈跟踪:
类“org.bouncycastle.asn1.ASN1ObjectIdentifier”的签名者
信息与中其他类的签名者信息不匹配
同一包
位于java.lang.ClassLoader.checkCerts(ClassLoader.java:952)
位于java.lang.ClassLoader.preDefineClass(ClassLoader.java:666)
位于java.lang.ClassLoader.defineClass(ClassLoader.java:794)
位于java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
位于org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2494)
位于org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:860)
位于org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1302)
位于org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1167)
请访问com.itextpdf.text.pdf.PdfEncryption.(PdfEncryption.java:147)
位于com.itextpdf.text.pdf.PdfWriter.setEncryption(PdfWriter.java:2041)
位于com.itextpdf.text.pdf.PdfStamper.setEncryption(PdfStamper.java:295)
位于com.itextpdf.text.pdf.PdfStamper.setEncryption(PdfStamper.java:330)
请访问com.itextpdf.text.pdf.PdfEncryptor.encrypt(PdfEncryptor.java:206)
如果你有什么解决办法,请告诉我。这将非常有帮助您正在混合两个iText版本:一个是2007年6月的过时版本(
com.lowagie
),一个是2011年11月的更新版本(com.itextpdf
)。这两个不同的iText版本需要不同版本的BouncyCastle。您应该限制自己使用单一版本的iText(最好是2016年的版本),并使用相应的BouncyCastle版本。您将在所使用的iText版本附带的POM中找到所需的BouncyCastle版本。注意,您还必须仔细检查代码部署的位置。某些web服务器附带的BouncyCastle版本与您需要的版本不同。这可能导致不一致。另一个例子是Android。Android附带旧版本的BouncyCastle和需要更新版本的软件与旧版本冲突。这就是为什么iTextG(iText的Android端口)使用SpongyCastle而不是BouncyCastle。除了包名之外,SpongyCastle与BouncyCastle完全相同。这样,SpongyCastle就不会与Android上的BouncyCastle版本发生冲突
长话短说:你说我有下面提到的依赖项,但你的假设是正确的,我认为是错误的,因为你混合了两个不同版本的iText。你混合了两个版本的iText:一个是指2007年6月我的名字(
com.lowagie
)的过时版本,另一个是更新版本(com.itextpdf
)从2011年11月开始。这两个不同的iText版本需要不同版本的BouncyCastle。您应该限制自己使用单一版本的iText(最好是2016年的版本)并使用相应的BouncyCastle版本。您将在正在使用的iText版本附带的POM中找到所需的BouncyCastle版本。请注意,您还必须仔细检查代码的部署位置。某些web服务器附带的BouncyCastle版本与您需要的版本不同。这可能导致o不一致。另一个例子是Android。Android附带旧版本的BouncyCastle和需要更新版本的软件与旧版本冲突。这就是为什么iTextG(iText的Android端口)使用SpongyCastle而不是BouncyCastle。SpongyCastle与BouncyCastle相同,只是包名不同。这样SpongyCastle就不会与Android上可用的BouncyCastle版本冲突
长话短说:你说我有下面提到的依赖项,但你的假设是正确的,我认为是错误的,因为你混合了iText的两个不同版本。为什么你依赖于
com.itextpdf:itextpdf
和com.lowagie:iText
?回答你的问题:BouncyCastle是iText的pom.xml
中定义了可传递的依赖项,因此,如果您的应用程序不直接使用BouncyCastle,您不需要在自己的pom.xml
中定义它。我甚至不知道九年前的com.lowagie:iText
版本需要什么版本的BouncyCastle作为依赖项。运行这个命令:mvn依赖项:tree-Dverbose | tee dependens.txt
(在Linux/OSX上)或者mvn dependency:tree-Dverbose>依赖于Windows上的.txt
,并将输出添加到您的问题中。为什么您依赖于com.itextpdf:itextpdf
和com.lowagie:itext
?回答您的问题:BouncyCastle是在itext的pom.xml
中定义的可传递依赖项,因此如果您的应用程序不直接使用BouncyCastle,您不需要在自己的pom.xml
中定义它。我甚至不知道BouncyCastle的哪个版本是com的九年版本