项目场景:
项目场景:使用微信支付平台的 native 方式实现微信支付功能。
问题描述
在获取签名验证器的代码中一直出现 Illegal key size 异常
代码如下【代码不用看,代码没错】:
/**
* 获取签名验证器
* 签名验证器: 用于验签的对象
*/
@Bean
public ScheduledUpdateCertificatesVerifier getVerifier(){
log.info("获取签名验证器");
//获取商户私钥
PrivateKey privateKey = getPrivateKey(privateKeyPath);
//私钥签名对象
PrivateKeySigner privateKeySigner = new PrivateKeySigner(mchSerialNo, privateKey);
//身份认证对象
WechatPay2Credentials wechatPay2Credentials = new WechatPay2Credentials(mchId, privateKeySigner);
// 使用定时更新的签名验证器,不需要传入证书
ScheduledUpdateCertificatesVerifier verifier = new ScheduledUpdateCertificatesVerifier(
wechatPay2Credentials,
// 异常定位到这里, 说 apiV3Key 的长度有问题
apiV3Key.getBytes(StandardCharsets.UTF_8));
return verifier;
}
原因分析:
我猜想可能是我在配置文件中无意间添加了【空格】,但并不是。
我猜想是不是我代码写错了?我拿老师验证成功的代码测试,还是有 Illegal key size 问题。
说明并不是代码的问题
这是 Java 运行时环境的限制。当密钥大于128位的时候会抛出 java.security.InvalidKeyException: Illegal key size 异常。
解决方案:
【jdk 1.8.0_131\jre\lib\security】文件夹下的 local_policy.jar 和 US_export_policy.jar 文件(如上图)限制密钥长度不能大于128位。
下载下面的百度网盘中的内容,用网盘中的 local_policy.jar 和 US_export_policy.jar 文件覆盖原来【jdk 1.8.0_131\jre\lib\security】文件夹下的 local_policy.jar 和 US_export_policy.jar 文件
链接:https://pan.baidu.com/s/1VZqxU6WMU_TuVzEmxk5e_A
提取码:ghye
如果你安装的 jdk 不是 1.8 版,需要在网上下载其他版本的哦!
如果解决了您的问题,点个赞吧!