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

3
我希望使用256位密钥的AES GCM模式。目前,这会导致以下错误:Error java.security.InvalidKeyException: Illegal key size
根据网上资料,这是由于加密出口限制所致,我需要从Oracle安装Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files。我认为要求用户修改他们的JRE才能运行我的应用程序太过苛刻了。是否有可能将加密扩展策略文件捆绑到我的应用程序中?
1个回答

1

我发现这个问题与你的问题非常相似 在openjre中使用需要Java策略文件的加密

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

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: 不可以 无法将静态终态布尔字段javax.crypto.JceSecurity.isRestricted设置为(布尔)false


这对我来说是有效的(现在)。我猜有一个风险,它会在新的Java版本中出现问题,就像你所说的那样? - Atte Juvonen
是的。在分发应用程序时,您可能希望发送兼容性列表。 - pedrofb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接