かれ4

かれこれ4個目のブログ

Javaで鍵長256bitのAESを使う

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);
}