我在商业Web应用程序中需要AES256加密/解密.目前一切都很好,密钥大小为128.这在加密方面并不令人满意,所以我的问题是如何最好地绕过这个问题而不需要用户手动安装任何东西.
我有来自Oracle的无限制管辖jar文件,但我不知道在用户的JRE/lib/security目录中替换这些文件是否与旧版本兼容.显然我不想破坏用户的JRE.此外,我对我的JRE安全目录有写权限,但我认为某些用户不具备这些权限.
有没有一个简单的方法来解决这个问题,或者我是坚持使用弱加密还是可能有问题的用户步骤?
更新"unrestricting" 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, …Run Code Online (Sandbox Code Playgroud)