Javaで鍵長256bit のAESを使おうとすると、
java.security.InvalidKeyException: Illegal key size or default parameters
こんなExceptionが出て、うまくいかない。
Java SE - Downloads | Oracle Technology Network | Oracle 上記ページから Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files for JDK/JRE 8 をダウンロードしてきて /{jreのディレクトリ}/lib/securityの中に以下の2つのファイルを放り込む。 - local_policy.jar - US_export_policy.jar
簡単に出来ることではあるけれど、PaaSを使う場合にどうしたものかとなってしまう。 そんな時にリフレクションを使って、 以下のようなコードをAESを使う前に一度だけ実行しておけばOK。
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); } catch (ClassNotFoundException | NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException ex) { ex.printStackTrace(System.err); }