Java项目导入BouncyCastle CMSUtils类提示不可见的问题求助
问题:BouncyCastle中CMSUtils类无法导入的问题
复现环境
- Eclipse 2024-06 IDE
- Maven快速启动项目
- BouncyCastle版本:1.78.1
Maven依赖配置
<dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcpkix-jdk18on</artifactId> <version>1.78.1</version> </dependency> <dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk18on</artifactId> <version>1.78.1</version> </dependency> <dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcutil-jdk18on</artifactId> <version>1.78.1</version> </dependency>
测试代码
package cmstest; import org.bouncycastle.cms.CMSTypedStream; import org.bouncycastle.cms.CMSUtils; public class App { public static void main( String[] args ) { System.out.println( "Hello World!" ); } }
问题现象
导入CMSUtils时IDE提示:The type org.bouncycastle.cms.CMSUtils is not visible,但同属bcpkix-jdk18on-1.78.1.jar的CMSTypedStream类可正常导入,无报错。查看Jar包确认两个类都存在,但无法导入CMSUtils。
补充说明
开发项目需实现基于智能卡私钥的自定义数字签名方式,尝试在自定义包下子类化部分BC类时发现此问题。
解答
这是因为CMSUtils类的访问修饰符并非public,而是包级私有(无修饰符),仅允许同包内的类访问。
BouncyCastle的很多工具类都是为内部逻辑设计的,不会对外暴露公共访问权限,CMSUtils就是这类内部工具类——它仅用于BC内部CMS相关模块的方法复用,不期望被外部代码直接依赖或调用。
针对你的自定义签名需求,无需直接依赖CMSUtils,可通过以下方式处理:
- 基于BC公开API扩展:比如继承
org.bouncycastle.cms.SignerInformationGenerator类,或实现org.bouncycastle.operator.ContentSigner接口,这些都是对外暴露的合法扩展入口。 - 自行实现必要逻辑:如果确实需要
CMSUtils中的某些工具方法,建议自己复刻对应的逻辑,不要依赖这个内部类,避免后续BC版本更新导致代码兼容性问题。
内容的提问来源于stack exchange,提问作者Milan Markovic
相关产品推荐
相关产品推荐

