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

时间:2013-01-04 11:42:48

标签: encryption bouncycastle openjdk policyfiles

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

或者用openjdk帮助构建项目?

谢谢

2 个答案:

答案 0 :(得分:3)

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

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

  }

这不好但是有效!

答案 1 :(得分:3)

另一个答案是正确的,但不完整。经过多次拧紧后,我点击了下面对我有用的代码。不要担心法律方面,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);