编辑:这是此问题的更新答案:在部署应用程序时如何避免安装“无限强度”JCE策略文件?
只需使用几行反射即可禁用密钥大小限制。我们在程序中使用此方法,该程序需要互操作性才能访问256位密码。
private static void removeCryptographyRestrictions() { if (!isRestrictedCryptography()) { return; } try { java.lang.reflect.Field isRestricted; try { final Class<?> c = Class.forName("javax.crypto.JceSecurity"); isRestricted = c.getDeclaredField("isRestricted"); } catch (final ClassNotFoundException e) { try { // Java 6 has obfuscated JCE classes final Class<?> c = Class.forName("javax.crypto.SunJCE_b"); isRestricted = c.getDeclaredField("g"); } catch (final ClassNotFoundException e2) { throw e; } } isRestricted.setAccessible(true); isRestricted.set(null, false); } catch (final Throwable e) { logger.log(Level.WARNING, "Failed to remove cryptography restrictions", e); }}private static boolean isRestrictedCryptography() { return "Java(TM) SE Runtime Environment" .equals(System.getProperty("java.runtime.name"));}但是,我们的程序不是applet,并且我不确定applet是否可以访问反射API。
关于合法性的问题也仍然存在。有这个限制的原因。如果您担心,请咨询律师。
如果可能,请尝试将其保留为128位密钥。即使考虑摩尔定律,打破128位AES也会花费数十亿亿年。较长的密钥在现实世界中无济于事-
尤其是当密钥是从密码派生而来的时,密码无论如何都没有接近256位的熵。



