Daily Record

This is a non-commercial site, is a record of the life of a technology site

SEARCH


解决微信支付在JDK1.8中的v3密匙长度问题

在使用微信支付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)
...
Caused by: java.security.InvalidKeyException: Illegal key size
at javax.crypto.Cipher.checkCryptoPerm(Cipher.java:1039)
...

解决步骤

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

对于Oracle JDK 8:

  1. 下载JCE无限制强度管辖策略文件

  2. 替换文件

    • 将下载的 local_policy.jarUS_export_policy.jar文件替换到 <JAVA_HOME>/jre/lib/security/目录中。

对于Oracle JDK 9及更高版本:

  • JCE文件已经默认包含在JDK中,只需启用即可。
    1. 找到配置文件:<JAVA_HOME>/conf/security/java.security

    2. 启用无限制策略:

      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框架。

5. 重新启动

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

结论

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

最近的文章

MySQL 安装与配置指南(Windows系统) 物料包地址 MySQL :: Download MySQL Community Server (Archived Versions) DLL下载地址 安装步骤 下载并解压MySQL安装包 访问MySQL官方网站的“Download MySQL Com…

继续阅读
更早的文章

在Linux系统上安装JDK 1.8是Java开发的基础步骤之一。以下是一个详细的步骤指南,帮助您成功安装JDK 1.8。 1. 下载JDK 1.8安装包 首先,您需要从Oracle官网下载JDK 1.8的安装包。访问Oracle Java SE下载页面。请注意,下载可能需要您登录或注册Oracle…

继续阅读