Java: исправление политики безопасности на стороне клиента из апплета для AES256

Мне требуется шифрование / дешифрование AES256 в коммерческом веб-приложении. В настоящее время все хорошо с размером ключа 128. Это криптографически неудовлетворительно, поэтому моя проблема заключается в том, как лучше обойти эту проблему, не требуя от пользователя установки чего-либо вручную.

У меня есть файлы JAR с неограниченной юрисдикцией от Oracle, но я не знаю, будет ли их замена в каталоге пользователя JRE / lib / security совместима со старыми версиями. Очевидно, я не хочу портить JRE пользователя. Также у меня есть разрешение на запись в мой каталог безопасности JRE, но я предполагаю, что некоторые пользователи не будут иметь этих привилегий.

Есть ли простой способ обойти эту проблему, или я застрял либо со слабым шифрованием, либо с потенциально проблемным шагом для пользователей?

Обновление для "неограниченно"javax.crypto.JceSecurity

@ntoskml Вы правы.getMaxAllowedKeyLength по-прежнему возвращает ограниченный размер ключа, но шифрование успешно выполняется с размером ключа == 256 :). Я обновлю свой метод тестирования и установлю размер ключа, если доступно сильное шифрование. Спасибо

>>> from javax.crypto import Cipher
>>> Cipher.getMaxAllowedKeyLength("AES")
128
>>> from java.lang import Class
>>> c = Class.forName("javax.crypto.JceSecurity")
>>> isRestricted = c.getDeclaredField("isRestricted")
>>> isRestricted.setAccessible(True)
>>> isRestricted.set(None, False)
>>> isRestricted.get(None)
False
>>> Cipher.getMaxAllowedKeyLength("AES")
128
>>> from javax.crypto import KeyGenerator
>>> kge = KeyGenerator.getInstance("AES")
>>> kge.init(256)
>>> aesKey = kgen.generateKey()
>>> c2 = Cipher.getInstance("AES")
>>> c2.init(Cipher.ENCRYPT_MODE, aesKey)
>>> c2.doFinal("test")
array('b', [-81, 99, -61, -51, 93, -42, -68, -28, 107, 59, -109, -98, -25, 127, 37, 23])

И тестовый пример после перезапуска консоли Jython

>>> # Reflection as above
>>> isRestricted.get(None)
True
>>> kge.init(256)
>>> aesKey = kge.generateKey()
>>> c2.init(Cipher.ENCRYPT_MODE, aesKey)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
        at javax.crypto.Cipher.checkCryptoPerm(Cipher.java:1011)
        at javax.crypto.Cipher.implInit(Cipher.java:786)
        at javax.crypto.Cipher,.chooseProvider(Cipher.java:849)
        at javax.crypto.Cipher.init(Cipher.java:1213)
        at javax.crypto.Cipher.init(Cipher.java:1153)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)

java.security.InvalidKeyException: java.security.InvalidKeyException: Illegal key size or default parameters

Бинго :) Спасибо, что поделились @ntoskml

Ответы на вопрос(2)

Ваш ответ на вопрос