报错
IllegalArgumentException: java.security.InvalidKeyException: Illegal key size
错误的原因
使用 AES 加解密时,遇到加解密时 128 当位密钥加解密时,没有特殊处理;
但是,在使用中 256 当位密钥加解密时,如果不进行特殊处理,就会出现这种异常 java.security.InvalidKeyException: Illegal key size。
JRE 中自带的 “local_policy.jar” 和 “US_export_policy.jar” 是支持 128 当我们需要使用位密钥的加密算法时 256 位密钥算法已超出其范围,无法支持。
处理方案如果不方便覆盖文件,可以在代码中反射修改,并在main中调用方法
/** * 去除JCE限制 */ private static void removeJceLimit() { //去除JCE加密限制,仅限于Java1.8 try { Field field = Class.forName("javax.crypto.JceSecurity").getDeclaredField("isRestricted"); field.setAccessible(true); Field modifiersField = Field.class.getDeclaredField("modifiers"); modifiersField.setAccessible(true); modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL); field.set(null, false); LOGGER.info("============= remove the key size restriction Success ============="); } catch (ClassNotFoundException | NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException ex) { ex.printStackTrace(System.err); } }