3

Javaと128ビットより長いキーで暗号化を使用したい場合は、Javaポリシーファイルを使用する必要があります。これらのアプリケーションをopenjreで起動して実行するにはどうすればよいですか?ポリシーファイルなしでOraclejreを使用した場合と同じエラーが発生しますが、Oracleポリシーファイルを単純に使用することはできませんか?または私はできますか?

または、openjdkを使用してプロジェクトを構築することは役に立ちますか?

ありがとうございました

4

2 に答える 2

3

私は以下を見つけました。それは私が今まで持っていたすべての政策問題を解決するようです。

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

  }

それはいいことではありませんが、機能しています!

于 2013-01-29T10:25:35.173 に答える
3

他の答えは正しい行にありますが、不完全です。何度もねじ込んだ後、私は自分に合った次のコードを見つけました。法的な側面について心配する必要はありません。Oracleは2011年以来、このばかげたエクスポート制御を無意味に取り除く許可を実際に持っていますが、JVMの更新にはまだ取り掛かっていません。(私を信じていない場合は、バグトラッカーを確認してください)。

お役に立てれば。これはJava8で動作します。コードのその部分が大きく変わる可能性は低いですが、明らかに、ここでは内部プライベートコードをいじっているので、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);
于 2014-01-15T21:20:34.220 に答える