是否可以将JCE策略文件与java程序捆绑在一起

时间:2017-01-12 14:02:57

标签: java cryptography

我希望AES具有256位密钥大小的GCM模式。目前,这导致:

Error java.security.InvalidKeyException: Illegal key size

Apparently,这是由于加密的出口限制,我需要从Oracle安装Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files。我认为要求我的应用程序的用户修改他们的JRE只是为了运行我的应用程序太多了。是否可以将加密扩展策略文件捆绑到我的应用程序中?

1 个答案:

答案 0 :(得分:1)

我发现这个问题与你的Using encryption that would need Java Policy Files in openjre

非常相似

但接受的答案对我不起作用。试试这个

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

兼容性

  • JRE 7:好的

  • JRE 8 u101:好的

  • JRE 8 u112:FAIL Can not set static final boolean field javax.crypto.JceSecurity.isRestricted to (boolean)false