使用在openjre中需要Java Policy Files的加密

如果我想使用java和加密密钥长度超过128位,我必须使用Java策略文件。 如何使用openjre启动并运行这些应用程序? 我得到了相同的错误,我使用oracle jre没有策略文件,但我不能简单地使用Oracle策略文件? 或者我可以吗?

或者用openjdk帮助构建项目?

谢谢

我找到了以下内容。 它似乎解决了我曾经遇到的所有政策问题。

try { Field field = Class.forName("javax.crypto.JceSecurity").getDeclaredField("isRestricted"); field.setAccessible(true); field.set(null, java.lang.Boolean.FALSE); } catch (Exception ex) { } 

这不好,但工作!

另一个答案是正确的,但不完整。 经过多次拧紧后,我点击了以下对我有用的代码。 不要担心法律方面,Oracle自2011年以来实际上已经允许摆脱这种愚蠢的出口控制废话,但还没有到处更新JVM! (如果你不相信我,请检查他们的bug追踪器)。

希望这可以帮助。 它适用于Java 8.代码的这一部分不太可能发生太大变化,但显然,我们在这里摆弄内部私有代码,因此它可以随时破解任何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);