java.security.NoSuchAlgorithmException: SecretKeyFactory PBEWithMD5AndTripleDES not found

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

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

再编译就大功告成了

您可能感兴趣的与本文相关的镜像

Llama Factory

Llama Factory

模型微调
LLama-Factory

LLaMA Factory 是一个简单易用且高效的大型语言模型(Large Language Model)训练与微调平台。通过 LLaMA Factory,可以在无需编写任何代码的前提下,在本地完成上百种预训练模型的微调

### Java 中处理 `NoSuchAlgorithmException` 和 SSLv2 `SSLContext` 在Java环境中遇到`java.security.NoSuchAlgorithmException: SSLv2 SSLContext not available`错误通常意味着尝试使用的算法或协议版本不再被支持。此问题可能源于试图初始化一个不被当前JVM所支持的特定类型的`SSLContext`实例。 由于Oracle JDK从某个更新版本开始移除了对SSLv2的支持,因此直接请求创建基于SSLv2的`SSLContext`会抛出异常[^1]。对于希望兼容旧系统的开发者而言,这构成了挑战。然而,现代安全实践强烈建议避免使用过时且存在已知漏洞的协议版本如SSLv2;取而代之的是采用更安全的选择比如TLS。 为了应对上述情况并确保应用程序能够正常运行而不依赖于已被弃用的功能,可以考虑以下几种策略: #### 使用 TLS 协议 推荐的做法是从代码层面指定更高版本的安全传输层协议(TLS),而不是坚持使用已经废弃的SSLv2。可以通过设置系统属性来控制默认启用哪些协议版本: ```properties -Dhttps.protocols=TLSv1,TLSv1.1,TLSv1.2 ``` 或者,在程序内部通过编程方式配置`SSLSocketFactory`以仅允许最新的TLS变体: ```java System.setProperty("https.protocols", "TLSv1.2"); // 或者动态设定 javax.net.ssl.SSLContext sc = javax.net.ssl.SSLContext.getInstance("TLSv1.2"); sc.init(null, null, new java.security.SecureRandom()); ``` #### 自定义 `SSLContext` 如果确实有必要实现某些特殊需求,则可以根据具体应用场景构建自定义化的`SSLContext`实例。例如,当集成第三方库(如QPID JMS)时,可能会涉及到定制化SSL上下文环境的工作[^2]。此时应遵循官方文档指导完成相应操作,并注意保持良好的安全性标准。 #### 配置密钥库参数 有时该类问题也可能是因为设置了不当的密钥库选项引起的。确认是否正确指定了密钥存储路径及其密码等必要信息。特别要注意区分`javax.net.ssl.keyStorePassword`与`javax.net.ssl.keyPassword`之间的差异——后者并不总是适用[^3]。 综上所述,针对`SSLv2 SSLContext not available`这一具体情况的最佳解决方案通常是转向更加健壮可靠的替代品,即TLS系列协议之一。这样做不仅解决了即时的技术难题,同时也提高了整体通信链路的安全等级。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值