问题:
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:
-
访问 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)
-
下载,解压下载的文件,在解压后的目录中应该可以找到两个 .jar 文件:local_policy.jar 和 US_export_policy.jar。
-
找到你的 Java 安装目录下的 jre\lib\security 目录,然后备份该目录下原来的 local_policy.jar 和 US_export_policy.jar 文件。
-
将你解压得到的 local_policy.jar 和 US_export_policy.jar 文件复制到 jre\lib\security 目录中,覆盖原来的同名文件。
替换jar后,重新执行代码,成功,问题解决!