java.security.NoSuchAlgorithmException: SecretKeyFactory PBEWithMD5AndTripleDES not found

在Java项目中遇到加密错误'java.security.NoSuchAlgorithmException: SecretKeyFactoryPBEWithMD5AndTripleDESimplementation not found'。通过检查可用加密算法发现缺少所需算法。解决方案是引入sunjce_provider.jar到项目,并在代码中添加SunJCE提供者,从而成功使用PBEWithMD5AndTripleDES算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java.security.NoSuchAlgorithmException: SecretKeyFactory PBEWithMD5AndTripleDES implementation not found

最近项目中在进行加密是遇到个问题

SecretKeyFactory skf = SecretKeyFactory.getInstance
                    ("PBEWithMD5AndTripleDES");

执行以上代码时,报错:
org.jasypt.exceptions.EncryptionInitializationException: java.security.NoSuchAlgorithmException: SecretKeyFactory PBEWithMD5AndTripleDES implementation not found

执行查看遍历加密算法:

for(Object obj:java.security.Security.getAlgorithms("Cipher")){
        Log.e("加密",obj.toString());
 }

//打印结果
PBEWITHSHAAND192BITAES-CBC-BC
AES/CBC/PKCS5Padding
PBEWITHSHAAND40BITRC4
AES/CFB/NoPadding
DESEDE/CBC/NoPadding
PBEWITHSHAAND128BITRC2-CBC
PBEWITHSHA256AND256BITAES-CBC-BC
RSA/ECB/NoPadding
PBEWITHSHAAND128BITAES-CBC-BC
DESEDE/ECB/NoPadding
PBEWITHSHAAND40BITRC2-CBC
AES/ECB/PKCS5Padding
AES/OFB/PKCS5Padding
PBEWITHSHA1ANDDES
AESWRAP
AES/CBC/NoPadding
DES
AES
DESEDEWRAP
DESEDE/CFB/NoPadding
PBEWITHSHAAND256BITAES-CBC-BC
PBEWITHSHA256AND192BITAES-CBC-BC
PBEWITHMD5AND128BITAES-CBC-OPENSSL
AES/ECB/NoPadding
PBEWITHMD5AND256BITAES-CBC-OPENSSL
BLOWFISH
DESEDE/OFB/PKCS5Padding
DESEDE/OFB/NoPadding
PBEWITHSHA1ANDRC2
PBEWITHSHAAND2-KEYTRIPLEDES-CBC
PBEWITHMD5AND192BITAES-CBC-OPENSSL
ARC4
DESEDE/ECB/PKCS5Padding
DESEDE/CBC/PKCS5Padding
AES/CTR/NoPadding
PBEWITHMD5ANDDES
DESEDE/CFB/PKCS5Padding
RSA
PBEWITHSHA256AND128BITAES-CBC-BC
PBEWITHSHAAND3-KEYTRIPLEDES-CBC
DESEDE
PBEWITHSHAANDTWOFISH-CBC
PBEWITHSHAAND128BITRC4
RSA/ECB/PKCS1Padding
AES/OFB/NoPadding
AES/CFB/PKCS5Padding
PBEWITHMD5ANDRC2
AES/CTR/PKCS5Padding

打印发现没有PBEWithMD5AndTripleDES这个算法

经过一阵百度,最终终于解决了问题
在自己jdk目录下 (jdk1.8.0_73\jre\lib\ext\sunjce_provider.jar) 找到sunjce_provider.jar,将这个jar包放入自己项目libs,并添加依赖,并在代码中修改成以下代码

Class cryptoClass = Class.forName("com.sun.crypto.provider.SunJCE");

            Provider SunCrypto = (Provider) cryptoClass.newInstance();

            Security.insertProviderAt(SunCrypto, 1);

            SecretKeyFactory skf = SecretKeyFactory.getInstance
                    ("PBEWithMD5AndTripleDES", "SunJCE");

遍历加密算法结果会发现多了 PBEWithMD5AndTripleDES这个算法

......
 PBEWITHMD5ANDDES
 AES_192/OFB/NoPadding
 PBEWithHmacSHA256AndAES_256
 PBEWithMD5AndTripleDES
 PBEWithHmacSHA512AndAES_256
 AES_256/ECB/NoPadding
 PBEWITHSHAAND128BITRC4
 PBEWithMD5AndDES
 AES_192/CBC/NoPadding
 AES/CFB/PKCS5Padding
 PBEWITHMD5ANDRC2
 PBEWithSHA1AndRC4_40

再编译就大功告成了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值