首页 > 编程语言 >java.security.NoSuchAlgorithmException:Cannot find any provider supporting AES/CBC/PKCS7Padding问题解决

java.security.NoSuchAlgorithmException:Cannot find any provider supporting AES/CBC/PKCS7Padding问题解决

时间:2022-12-14 19:38:33浏览次数:77  
标签:supporting AES java BC CBC PKCS7Padding provider security


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

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

解决方式:

  1. 在 jdk安装目录中(​​%JAVA_HOME%\jre\lib\ext​​)添加 jar 包 ​​bcprov-jdk15on-1.58.ja​​r。(我添加的是这个,下载的最新的,​​jar下载地址​​ 来自上面那篇博文,版本与原博文不太一样,但亲测可用)
  2. 在 jdk安装目录下( ​​%JAVA_HOME%\jre\lib\security​​ )修改 ​​java.security​​ 文件,将第74行(我的是在74行)的 ​​security.provider.7=com.sun.security.sasl.Provider​​ 替换为​​security.provider.7=org.bouncycastle.jce.provider.BouncyCastleProvider​​然后,运行项目,OK,成功解密。

另外有一个地方需要注意以下:

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding","BC");

其中的 ​​"BC"​​需要加上,不然会报异常:

javax.crypto.BadPaddingException: pad block corrupted

原因:因为BC是一个provider,而org.bouncycastle.jce.provider.BouncyCastleProvider是个第三方的库。如果jce自带的就可以不用加BC,但是JCE不支持PKCS7Padding的填充方式。

标签:supporting,AES,java,BC,CBC,PKCS7Padding,provider,security
From: https://blog.51cto.com/u_15461374/5938242

相关文章

  • 深入分析JavaWeb 25 -- 自定义标签开发案例和打包自定义标签库
    一、开发标签库案例1.1、开发防盗链标签1、编写标签处理器类:RefererTag.javapackageme.gacl.web.simpletag;importjava.io.IOException;importjavax.servlet.http.Ht......
  • java 常见基础题
    Java中==和equals和hashCode的区别基本数据类型的​​==​​比较的值相等.类的​​==​​​比较的内存的地址,即是否是同一个对象,在不覆盖​​equals​​​的情况下,同比较内......
  • Java中的抽象与封装
    封装形式封装是四个基本的OOP概念之一。其他三个是继承,多态和抽象。Java中的封装是一种将数据(变量)和作用于数据(方法)的代码包装为一个单元的机制。在封装中,一个类的变量将......
  • Java基础之变量
    变量变量为可以变化的量。java是一种强类型语言,每个变量都必须声明其类型。Java变量是程序中最基本的存储单位,其要素包括:变量名,变量类型和作用域。 数据类型变量名=......
  • 使用java 实现mqtt两种方式
    前言在开发MQTT时有两种方式一种是使用PahoJava原生库来完成,一种是使用springboot来完成。PahoJava库实现EclipsePahoJavaClient(opensnewwindow)是用Java编......
  • 16 Java内存模型与线程_Java内存模型
    目录1Java内存模型背景2主内存与工作内存3内存间交互及约束4volatile变量特性5原子性、可见性、有序性5.1原子性5.2可见性5.3有序性6先行发生原则7总结特别说明......
  • java Date和Timestamp类型的相互转换
    重要的概念:日期类和时间戳类都是用一个时间数值——日期相对于基准日期(1970年1月1日GMT时间(格林尼治时间)0时0分0秒)的时间间隔(以毫秒为单位)long类型来构造的通过Date对象......
  • 【Java】Spring Cache 缓存
    SpringCache一、Spring缓存抽象Spring从3.1开始定义了org.springframework.cache.Cache和org.springframework.cache.CacheManager接口来统一不同的缓存技术;并支......
  • Java: 在Excel中插入和提取图片
    在编辑Excel文档时,为了丰富文档内容或者更好地说明文档内容,有时我们会在单元格中插入图片。此外,整理文档内容时,也可以通过编程的方式将图片从Excel中提取出来。接下来我就将......
  • Java继承构造方法的注意点
    父类:注意(x,y是private,不能继承到子类中)classPar{privateintx;privateinty;inta;publicPar(){}publicPar(intx,inty){t......