java.security.InvalidKeyException: Illegal key size or default parameters SM2加解密执行异常

问题:

SM2使用公钥加密时,Cipher初始化异常,

    Cipher cipher = Cipher.getInstance("SM2", "BC");
    cipher.init(Cipher.ENCRYPT_MODE, pubKey);

执行后报错:java.security.InvalidKeyException: Illegal key size or default parameters at javax.crypto.Cipher.checkCryptoPerm(Cipher.java:1026) at javax.crypto.Cipher.init(Cipher.java:1245) at javax.crypto.Cipher.init(Cipher.java:1186)

原因:

这个报错通常表示密钥的长度不符合加密算法的要求,可能是由于当前使用的JDK版本不支持加密所使用的密钥长度。

解决方案通常是安装Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files。从而支持使用更长的密钥长度进行加密操作。

安装JCE:

  1. 访问 Oracle 官方网站的 Java Cryptography Extension (JCE) 无限制权限策略文件下载页面,Java8 官网: JCE Unlimited Strength Jurisdiction Policy Files for JDK/JRE 8 Download | Oracle 中国),需要oracle账号;也可以直接网上找对应资源(链接: https://pan.baidu.com/s/1OQj9_4YaVMGlCsfSiFkXuQ  密码: co2d)

  2. 下载,解压下载的文件,在解压后的目录中应该可以找到两个 .jar 文件:local_policy.jar 和 US_export_policy.jar。

  3. 找到你的 Java 安装目录下的 jre\lib\security 目录,然后备份该目录下原来的 local_policy.jar 和 US_export_policy.jar 文件。

  4. 将你解压得到的 local_policy.jar 和 US_export_policy.jar 文件复制到 jre\lib\security 目录中,覆盖原来的同名文件。

替换jar后,重新执行代码,成功,问题解决!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值