java.security.NoSuchAlgorithmException: No such algorithm: SM4/ECB/PKCS5Padding

出现这个问题的原因

1、没有引入合适的jar包

目前了解到的最低适用版本是1.59,所以需要使用1.59及以上的版本

		<dependency>
            <groupId>org.bouncycastle</groupId>
            <artifactId>bcprov-jdk15on</artifactId>
            <version>1.59</version>
        </dependency>

2、没有添加当前算法

解决办法:添加下面的代码

	static {
        Security.addProvider(new BouncyCastleProvider());
    }

这一行代码调用了 Security 类的 addProvider 方法,将一个新的 BouncyCastleProvider 实例添加到 Java 安全提供者列表中

3、项目中存在多个版本的jar包

使用BouncyCastleProvider 关键词搜索一下,看下整个项目是否存在多个版本的org.bouncycastle jar包
或者使用下面的语句打印一下当前的jar包版本

		if (Security.getProvider(BouncyCastleProvider.PROVIDER_NAME) != null) {
            double version = Security.getProvider(BouncyCastleProvider.PROVIDER_NAME).getVersion();
            log.info("sys原有version:{}", version);
        }

如果存在多个版本的jar包,且为maven多子模块结构的话

解决办法:

1、排除掉低版本的jar包,在父pom文件中统一
2、在子模块中单独引入合适版本的org.bouncycastle jar包

扩展思维

对于找不到类的这类报错,都可以使用上面第三点的思路,查看是否存在多个版本的jar包,针对于某些类,引入的低版本jar包可能不包含该类,这个时候就需要在父pom文件中将jar包统一,或者在需要用到的子模块pom中单独引入合适的版本,不过推荐统一jar包版本方便后续扩展和开发

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐