iText/BouncyCastle ClassNotFound org.bouncycastle.asn1.DEREncodable and org.bouncycastle.tsp.TimeStampTokenInfo

Cob*_*aia 20 java cryptography bouncycastle exception itext

我正在尝试使用iText Java.当您运行示例" 如何签名 "时,会发生以下错误:

Caused by: java.lang.ClassNotFoundException: org.bouncycastle.tsp.TimeStampTokenInfo
Run Code Online (Sandbox Code Playgroud)

根据"iText入门 - 如何使用iText签名PDF",我必须使用BouncyCastle.

我从BouncyCastle下载页面 下载了文件:bcprov-jdk15on-147.jar .
并添加到项目中:Java Build Path/Libraries/Add External JARs ...

我添加了以下行:

Security.addProvider(new BouncyCastleProvider());
Run Code Online (Sandbox Code Playgroud)

运行该示例时,会发生相同的错误.
所以我下载了另一个文件:bcpkix-jdk15on-147.jar,标题为"PKIX/CMS/EAC/PKCS/OCSP/TSP/OPENSSL"
并添加到项目中:Java Build Path/Libraries/Add External JARs ...
现在我有了两个罐子.

运行该示例时,会发生以下错误:

Caused by: java.lang.ClassNotFoundException: org.bouncycastle.asn1.DEREncodable
Run Code Online (Sandbox Code Playgroud)

我尝试下载文件"bcprov-ext-jdk15on-147.jar",但没有解决问题.

我在Windows 7 64位上使用iText 5.2.1和eclipse.

jeh*_*hon 27

iText将bouncycastle依赖项标记为可选.如果需要它们,则需要在自己的pom文件中添加依赖项.

要找出要包含在项目中的依赖项,请打开您正在使用的版本的itextpdf pom.xml文件(例如5.3.2,此处)并搜索2个bouncycastle依赖项.

    <dependency>
        <groupId>org.bouncycastle</groupId>
        <artifactId>bcprov-jdk15on</artifactId>
        <version>1.47</version>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.bouncycastle</groupId>
        <artifactId>bcmail-jdk15on</artifactId>
        <version>1.47</version>
        <optional>true</optional>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

将它们复制到您的pom文件中并删除可选选项.

    <dependency>
        <groupId>com.itextpdf</groupId>
        <artifactId>itextpdf</artifactId>
        <version>5.3.2</version>
    </dependency>
    <dependency>
        <groupId>org.bouncycastle</groupId>
        <artifactId>bcprov-jdk15on</artifactId>
        <version>1.47</version>
    </dependency>
    <dependency>
        <groupId>org.bouncycastle</groupId>
        <artifactId>bcmail-jdk15on</artifactId>
        <version>1.47</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)


Ale*_*eon 19

BouncyCastle库正在进行大量的API更改,这破坏了与iText等其他库的兼容性.

  • 使用以前版本的BouncyCastle库.旧版本可以在这里找到.但是,您必须找到与此特定版本的BC兼容的正确版本的iText.

  • 制作自己的iText版本(已修复SVN中继).iText可以用Maven构建(在SVN的根目录下有一个简短的自述文件).请注意,自行承担风险,主干可能存在漏洞.

  • 等待iText的下一个版本.根据我的经验,iText发布每隔几个月发布一次,有时更频繁,有时更少.我不是iText提交者,所以我不能给你任何ETA.

可以在此主题中找到更多信息

  • 对于iText2.1.7和Sun JDK 1.7此链接修复了DEREncodable not_found问题.http://repo2.maven.org/maven2/org/bouncycastle/bcprov-jdk15%2b/1.46/bcprov-jdk15%2b-1.46.jar (6认同)

Cor*_*han 14

使用itextpdf版本5.5.4 org.bouncycastle依赖项被标记为<optional>true</optional>.这意味着你必须在你自己的pom中包含这些依赖项,否则你可能遇到classnotfound异常.

<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itextpdf</artifactId>
    <version>5.5.4</version>
</dependency>

<!-- Bouncycastle dependencies necessary as they are optional = true
    in itextpdf ... but they're not-so-optional in reality -->
<dependency>
    <groupId>org.bouncycastle</groupId>
    <artifactId>bcprov-jdk15on</artifactId>
    <version>1.49</version>
</dependency>
<dependency>
    <groupId>org.bouncycastle</groupId>
    <artifactId>bcpkix-jdk15on</artifactId>
    <version>1.49</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)


小智 5

从 bcprov-jdk15on-147 版本开始,在 org.bouncycastle.asn1 路径下不再存在 DEREncodable 类。您可以使用146(包括146)之前的版本来解决此问题。