我有一个使用256位AES加密的应用程序,Java不支持它的开箱即用。我知道为了让它正常工作,我在安全文件夹中安装了JCE无限强度jars。这对我作为开发者来说很好,我可以安装它们。
我的问题是,由于此应用程序将被分发,最终用户很可能不会安装这些策略文件。让最终用户下载这些内容只是为了让应用程序具有功能,这不是一个有吸引力的解决方案。
有没有办法让我的应用程序在不覆盖最终用户机器上的文件的情况下运行?是否有第三方软件可以在不安装策略文件的情况下进行处理?或者只从JAR中引用这些策略文件的方法?
发布于 2015-01-25 19:57:41
以下是解决方案:http://middlesphere-1.blogspot.ru/2014/06/this-code-allows-to-break-limit-if.html
//this code allows to break limit if client jdk/jre has no unlimited policy files for JCE.
//it should be run once. So this static section is always execute during the class loading process.
//this code is useful when working with Bouncycastle library.
static {
try {
Field field = Class.forName("javax.crypto.JceSecurity").getDeclaredField("isRestricted");
field.setAccessible(true);
field.set(null, java.lang.Boolean.FALSE);
} catch (Exception ex) {
}
}
发布于 2016-07-28 09:41:33
从JDK8u102开始,发布的依赖于反射的解决方案将不再有效:这些解决方案设置的字段现在是final
(https://bugs.openjdk.java.net/browse/JDK-8149417)。
看起来又回到了(a)使用Bouncy Castle,或者(b)安装JCE策略文件。
发布于 2011-05-09 01:56:28
据我所知,Bouncy Castle仍然需要安装罐子。
我做了一个小测试,似乎证实了这一点:
http://www.bouncycastle.org/wiki/display/JA1/Frequently+Asked+Questions
https://stackoverflow.com/questions/1179672
复制相似问题