商用 Web アプリケーションで AES256 暗号化/復号化が必要です。現在のところ、鍵のサイズは 128 ですべて問題ありません。これは暗号学的に満足できるものではないため、ユーザーが手動で何かをインストールする必要なく、この問題を回避する最善の方法が私の問題です。
Oracle の無制限の管轄 jar ファイルを持っていますが、ユーザーの 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を共有してくれてありがとう