基本概念

DES算法:密码体制中的对称密码体制,又被称为美国数据加密标准,是1972年美国IBM公司研制的对称密码体制加密算法。 明文按64位进行分组,密钥长64位,密钥事实上是56位参与DES运算(第8、16、24、32、40、48、56、64位是校验位, 使得每个密钥都有奇数个1)分组后的明文组和56位的密钥按位替代或交换的方法形成密文组的加密方法。

基本原理:DES 使用一个 56 位的密钥以及附加的 8 位奇偶校验位,产生最大 64 位的分组大小。这是一个迭代的分组密码,使用称为 Feistel 的技术,其中将加密的文本块分成两半。使用子密钥对其中一半应用循环功能,然后将输出与另一半进行"异或"运算;接着交换这两半,这一过程会继续下去,但最后一个循环不交换。DES 使用 16 个循环,使用异或,置换,代换,移位操作四种基本运算。

ECB(Electronic Codebook,电码本)模式:分组密码的一种最基本的工作模式。在该模式下,待处理信息被分为大小合适的分组,然后分别对每一分组独立进行加密或解密处理。

PKCS7Padding:假设数据长度需要填充n(n>0)个字节才对齐,那么填充n个字节,每个字节都是n;如果数据本身就已经对齐了,则填充一块长度为块大小的数据,每个字节都是块大小。

 DES/ECB/PKCS7Padding加密算法:在Java开发中,用到的DES的ECB加密模式、PKCS7Padding填充方式,Java目前仅支持PKCS5Padding填充模式,

问题描述

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

问题分析

Android支持PKCS7Padding填充方式,而java默认支持是PKCS5Padding填充方式 。

目前Java要实现PKCS7Padding填充模式的加密,需要借助第三方Jar包才可以实现,就是在初始化的时候 Security.addProvider 增加第三方的提供者,解密的时候还是按照原来的方式。

解决方案

BouncyCastle官网下载组件以支持PKCS7Padding填充。

方法一:手动添加

1、BouncyCastle官网

下载对应JDK版本的jar包

例:JDK1.8,下载最新版bcprov-ext-jdk15on-159.jar

2、把下载的bcprov-ext-jdk15on-159.jar分别复制到

${jdk_home}\jre\lib\ext

(eg:D:\Java\jdk1.8.0_144\jre\lib\ext)

${jre_home}\lib\ext

(eg:D:\Java\jre1.8.0_144\lib\ext)

3、修改java.security文件

${jdk_home}\jre\lib\security\java.security

(eg:D:\Java\jdk1.8.0_144\jre\lib\security\java.security)

${jre_home}\lib\security\java.security

(eg:D:\Java\jre1.8.0_144\lib\security\java.security)

4、添加Java的默认加密提供者

security.provider.11=org.bouncycastle.jce.provider.BouncyCastleProvider

在使用AES前,加入Security.addProvider(new BouncyCastleProvider());

即可,如果显示该class还没导入,那就手动导入到该工程就好

方法二:Maven项目

Maven

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

添加 默认加密提供者

  static {    Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());}

参考文章

https://www.cnblogs.com/cratos/p/3908412.html

https://www.jianshu.com/p/de84d355c96d

https://blog.csdn.net/qq_29109181/article/details/79938896

https://blog.csdn.net/gs12software/article/details/83899389

https://blog.csdn.net/VincentlVL/article/details/99219846

https://blog.csdn.net/mashengjun1989/article/details/81698271

https://blog.csdn.net/P923284735/article/details/84377128

JAVA——DES/ECB/PKCS7Padding加密算法[Cannot find any provider supporting DESEDE/CBC/PKCS7Padding]解决方案相关推荐

  1. java PKCS7Padding 加密Cannot find any provider supporting AES/CBC/PKCS7Padding 解决办法

    在java中用aes256进行加密,但是发现java里面不能使用PKCS7Padding,而java中自带的是PKCS5Padding填充,那解决办法是,通过BouncyCastle组件来让java里 ...

  2. java des ecb_【转】 java DES ECB模式对称加密解密

    最近需要又要使用DES加密数据,要求DES加密出来的数据为对称加密,经过研究,发现了一些问题: 1.DES对称ECB模式加密的数据,长度必须为8的倍数 2.加密的数据,加密后先转码(因为加密后的数据我 ...

  3. java des 加密 单倍长_明明白白使用DES加密算法

    DES加密算法在很多行业都有着非常广泛的应用,对于初学者,开始很容易被ECB.CBC以及计算MAC搞得困惑不已,下面我将一一介绍这几者之间的关系,希望对新人有帮助.为了易于表述,下面所有的密钥及数据都 ...

  4. java des ecb_java DES ECB模式对称加密解密

    最近需要又要使用DES加密数据,要求DES加密出来的数据为对称加密,经过研究,发现了一些问题: 1.DES对称ECB模式加密的数据,长度必须为8的倍数 2.加密的数据,加密后先转码(因为加密后的数据我 ...

  5. java des ecb_DES ECB加解密的Java实现

    package com.trq.nengyuan; import java.security.SecureRandom; import javax.crypto.spec.DESKeySpec; im ...

  6. java des解密乱码_des解密不完整,前面几位是乱码的解决办法

    在工作中遇到的Des解密问题,第三方发来的数据需要我们进行des解密,但是解密的结果前几位始终是乱码.废了半天劲,终于找到了问题所在. 下面先介绍一下des,了解des的同学可以直接看下面的解决办法. ...

  7. java aes php_php和java的aes默认加密算法有点区别及解决方法。

    1.php和java的aes默认加密算法有点区别,php能解密java加密的密文,但java不能解密php加密的密文.原因在于: 1.Java中AES加密与解密默认使用AES/ECB/PKCS5Pad ...

  8. Java 加密解密 对称加密算法 非对称加密算法 MD5 BASE64 AES RSA

    [最简单的加密] 1.简单的概念 明文:加密前的信息 密文:机密后的信息 算法:加密或解密的算法 密钥:算法使用的钥匙(读作miyao,正确应该是miyue,但是大家都读miyao) 2.简单的例子 ...

  9. Java 加密 AES 对称加密算法

    版权声明:本文为博主原创文章,未经博主允许不得转载. [AES] 一种对称加密算法,DES的取代者. 加密相关文章见:Java 加密解密 对称加密算法 非对称加密算法 MD5 BASE64 AES R ...

最新文章

  1. IBatis手动刷新缓存
  2. JNI设置C++与java的结合(2)
  3. 51CTO专访清无:Nginx_lua的应用及性能对比
  4. mysql 存储引擎接口_MySQL体系结构和存储引擎
  5. linux:gpg加密和解密
  6. oracle修改filesystem,oracle数据库 boost::filesystem使用例子
  7. nginx做代理服务
  8. Spring Cloud服务网关(Zuul)的配置项sensitiveHeaders
  9. delphi 发送网络消息_Actor 消息的可靠交付(Akka Typed)
  10. 正则表达式判断ip格式
  11. HTML5游戏实战 1 50行代码实现正面跑酷游戏
  12. 小团队管理核心(一)
  13. 低代码搭建门店管理之收发货管理系统
  14. 准备女儿的学前班毕业典礼
  15. Docker常用操作帅哥专供版
  16. Access根据出生日期计算年龄_WPS表格技巧—如何根据出生年月日求虚岁年龄
  17. C++ int类型转 LPCTSTR类型
  18. 电商详情页缓存架构(一)电商网站的商品详情页架构
  19. 踩坑日记——Oracle 错误:ORA-22922 不存在的 LOB 值
  20. 盛世昊通:从2021上海国际车展看汽车产业变革,这些信号不容错过

热门文章

  1. python程序入门设计_程序设计入门—Python
  2. java后台接收数据格式_Java后台基于POST获取JSON格式数据
  3. 光环大数据spark文档_推荐大数据Spark必读书目
  4. 转子接地保护原理_发电机转子一点接地保护的研究
  5. python3.5安装pillow_Python3.5在Windows 10上安装Pillow时出错
  6. JavaScript中的三种常用继承方法
  7. 马哥linux脚本,linux学习 – shell脚本
  8. java小程序扑克牌_用Java来写一个模拟斗地主发牌的小程序
  9. android python 纠正图片,Python脚本替换Android资源(包名,图片,文件内容)
  10. php mysql八大动态w...,PHP+MySQL八大动态Web应用实战