Использование шифрования, которое потребует файлов политики Java в openjre

если я хочу использовать java и шифрование с ключами длиннее 128 бит, я должен использовать файлы политики Java. Как получить эти приложения и работать с openjre? Я получаю ту же ошибку, я получаю использование oracle jre без файлов политики, но я не могу просто использовать файлы политики Oracle? или я могу?

Или можно было бы создать проект с помощью openjdk?

Спасибо

2 ответа

Я нашел следующее. Кажется, он решает все проблемы политики, которые у меня когда-либо были.

try {
 Field field = Class.forName("javax.crypto.JceSecurity").getDeclaredField("isRestricted");
 field.setAccessible(true);
 field.set(null, java.lang.Boolean.FALSE);
 } catch (Exception ex) {
 }

Это не приятно, но работает!


Другой ответ на правильных строках, но неполный. После долгих размахов я надавил на следующий код, который работает для меня. Не беспокойтесь о правовых аспектах, у Oracle действительно есть разрешение избавиться от этого глупого контроля над экспортом без изменений с 2011 года, но просто еще не успел обновить JVM! (проверьте их контролер ошибок, если вы мне не верите).

Надеюсь, это поможет. Он работает на Java 8. Эта часть кода вряд ли сильно изменится, но, очевидно, мы играем с внутренним личным кодом, чтобы он мог в любой момент сломаться с любым обновлением Java. Предостережение emptor.

Field gate = Class.forName("javax.crypto.JceSecurity").getDeclaredField("isRestricted");
gate.setAccessible(true);
gate.setBoolean(null, false);
Field allPerm = Class.forName("javax.crypto.CryptoAllPermission").getDeclaredField("INSTANCE");
allPerm.setAccessible(true);
Object accessAllAreasCard = allPerm.get(null);
final Constructor<!--?--> constructor = Class.forName("javax.crypto.CryptoPermissions").getDeclaredConstructor();
constructor.setAccessible(true);
Object coll = constructor.newInstance();
Method addPerm = Class.forName("javax.crypto.CryptoPermissions").getDeclaredMethod("add", java.security.Permission.class);
addPerm.setAccessible(true);
addPerm.invoke(coll, accessAllAreasCard);
Field defaultPolicy = Class.forName("javax.crypto.JceSecurity").getDeclaredField("defaultPolicy");
defaultPolicy.setAccessible(true);
defaultPolicy.set(null, coll);

licensed under cc by-sa 3.0 with attribution.