JDK1.8解决微信支付相关的IllegalArgumentException: java.security.InvalidKeyException: Illegal key size问题

JDK1.8解决微信支付相关的IllegalArgumentException: java.security.InvalidKeyException: Illegal key size问题

微信支付V3调用过程中遇到的java.security.InvalidKeyException: Illegal key size问题,通常是由于使用的加密密钥长度超过了Java默认支持的范围

错误内容:

Caused by: java.lang.IllegalArgumentException: java.security.InvalidKeyException: Illegal key size
	at com.wechat.pay.contrib.apache.httpclient.util.AesUtil.decryptToString(AesUtil.java:47)
	at com.wechat.pay.contrib.apache.httpclient.util.CertSerializeUtil.deserializeToCerts(CertSerializeUtil.java:42)
	at com.wechat.pay.contrib.apache.httpclient.cert.CertificatesManager.downloadAndUpdateCert(CertificatesManager.java:267)
	at com.wechat.pay.contrib.apache.httpclient.cert.CertificatesManager.initCertificates(CertificatesManager.java:295)
	at com.wechat.pay.contrib.apache.httpclient.cert.CertificatesManager.putMerchant(CertificatesManager.java:152)
	at com.magicyo.pay.config.WechatPayConfig.getVerifier(WechatPayConfig.java:133)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154)
	... 102 common frames omitted
Caused by: java.security.InvalidKeyException: Illegal key size
	at javax.crypto.Cipher.checkCryptoPerm(Cipher.java:1039)
	at javax.crypto.Cipher.implInit(Cipher.java:805)
	at javax.crypto.Cipher.chooseProvider(Cipher.java:864)
	at javax.crypto.Cipher.init(Cipher.java:1396)
	at javax.crypto.Cipher.init(Cipher.java:1327)
	at com.wechat.pay.contrib.apache.httpclient.util.AesUtil.decryptToString(AesUtil.java:40)
	... 112 common frames omitted

在这里插入图片描述


以下是解决这个问题的步骤:

(1)安装Java加密扩展(JCE)无限制强度管辖策略文件

对于Oracle JDK 8:

1.下载JCE无限制强度管辖策略文件:https://www.oracle.com/java/technologies/javase-jce8-downloads.html

2.解压文件并替换:将下载的local_policy.jar和US_export_policy.jar文件替换到<JAVA_HOME>/jre/lib/security/目录中。


对于Oracle JDK 9及更高版本:
JCE文件已经默认包含在JDK中,只需启用即可。
1.找到配置文件:<JAVA_HOME>/conf/security/java.security
2.启用无限制策略:
properties

crypto.policy=unlimited

确保其值为unlimited。如果没有这一行,手动添加。


对于OpenJDK:
OpenJDK 8u161及更高版本默认启用了无限制强度策略。


2. 使用Bouncy Castle库

如果安装JCE策略文件后问题仍然存在,可以使用Bouncy Castle库来替代JCE。

(1)添加Bouncy Castle依赖

在Maven项目的pom.xml中添加以下依赖:

<dependency>
    <groupId>org.bouncycastle</groupId>
    <artifactId>bcprov-jdk15on</artifactId>
    <version>1.68</version>
</dependency>
(2)在代码中添加Bouncy Castle作为安全提供者

确保在应用启动时添加Bouncy Castle作为安全提供者:

import org.bouncycastle.jce.provider.BouncyCastleProvider;

import java.security.Security;

public class Application {
    public static void main(String[] args) {
        Security.addProvider(new BouncyCastleProvider());
        // 启动Spring应用或其他初始化代码
    }
}
(3)检查微信支付配置中的密钥设置

确保微信支付的密钥配置正确,并且密钥长度符合要求。以下是一个示例配置:

@Configuration
public class WechatPayConfig {
    @Bean
    public Verifier getVerifier() throws Exception {
        // 加载微信支付公钥
        InputStream certStream = getClass().getResourceAsStream("/path/to/wechatpay/cert.pem");
        // 初始化公钥验证器
        Verifier verifier = new Verifier(certStream);
        return verifier;
    }
}
(4)检查依赖的库版本

确保所有相关库的版本都是兼容的,尤其是微信支付相关的库和Spring框架。

重新启动

完成以上步骤后,重新启动你的Spring应用,问题应该得到解决。

通过以上步骤,你应该能够解决微信支付相关的IllegalArgumentException: java.security.InvalidKeyException: Illegal key size问题。如果问题仍然存在,请检查所有相关的密钥配置和加密操作,确保它们都符合要求。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

未禾

您的支持是我最宝贵的财富!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值