JAVA——DES/ECB/PKCS7Padding加密算法[Cannot find any provider supporting DESEDE/CBC/PKCS7Padding]解决方案
基本概念
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]解决方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java——将JSONP返回的结果转化为
- 下一篇: JAVA——基于HttpClient的通