Cannot find any provider supporting PKCS7Padding 或 Illegal key size问题解决

编程入门 行业动态 更新时间:2024-10-09 06:24:44

Cannot find any provider <a href=https://www.elefans.com/category/jswz/34/1726004.html style=supporting PKCS7Padding 或 Illegal key size问题解决"/>

Cannot find any provider supporting PKCS7Padding 或 Illegal key size问题解决

一、原因

由于小程序开发的需求,需要在后台对微信接口返回的敏感信息加密数据进行解密,以便开发使用,但是,在解密时出现以下异常:

java.security.NoSuchAlgorithmException: Cannot find any provider supporting AES/CBC/PKCS7Padding

原因,是java原生jdk不支持PKCS7Padding填充方式,如果要使用这种方式,可以使用下面的解决方式,相比替换jdk中的jar,方式比较友好,毕竟修改jdk源码,我自己都慌。

二、解决方法

1、 添加pom依赖

Java标准库的java.security包提供了一种标准机制,允许第三方提供商无缝接入
BouncyCastle提供了很多Java标准库没有提供的哈希算法和加密算法;
使用第三方算法前需要通过Security.addProvider()注册。

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

2、注册自定义Provider,静态代码块中的代码


static {Security.addProvider(new BouncyCastleProvider());}/*** AES解密*/public static String decode(String key, String content) {try {javax.crypto.SecretKey secretKey = new javax.crypto.spec.SecretKeySpec(key.getBytes(), AES);javax.crypto.Cipher cipher = javax.crypto.Cipher.getInstance(CIPHER_ALGORITHM);cipher.init(javax.crypto.Cipher.DECRYPT_MODE, secretKey, new javax.crypto.spec.IvParameterSpec(KEY_VI));// 将加密并编码后的内容解码成字节数组byte[] byteContent = base64Decoder.decode(content);// 解密byte[] byteDecode = cipher.doFinal(byteContent);return new String(byteDecode, java.nio.charset.StandardCharsets.UTF_8);} catch (Exception e) {e.printStackTrace();}return null;}

3、操作完上面即可实现PKCS7Padding方式的加解密了

更多推荐

Cannot find any provider supporting PKCS7Padding 或 Illegal key size问题解决

本文发布于:2024-03-09 20:07:16,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1725991.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:supporting   provider   find   PKCS7Padding   size

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!