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包版本方便后续扩展和开发