JDeveloper ADF Mobile--javax.crypto-无法找到策略文件

JDeveloper ADF Mobile--javax.crypto-无法找到策略文件,java,oracle-adf,jdeveloper,jdk1.4,javax.crypto,Java,Oracle Adf,Jdeveloper,Jdk1.4,Javax.crypto,我试图在使用ADF mobile开发的移动应用程序中加密一些安全信息。我使用的是“javax.crypto.Cipher”。 据我所知,ADF Mobile将自己的JVM和应用程序的apk/ipa打包用于部署目的 java.lang.ExceptionInInitializerError at java.lang.Class.runStaticInitializers(Unknown Source) at javax.crypto.Cipher.a(Unknown Source) at java

我试图在使用ADF mobile开发的移动应用程序中加密一些安全信息。我使用的是“javax.crypto.Cipher”。 据我所知,ADF Mobile将自己的JVM和应用程序的apk/ipa打包用于部署目的

java.lang.ExceptionInInitializerError
at java.lang.Class.runStaticInitializers(Unknown Source)
at javax.crypto.Cipher.a(Unknown Source)
at javax.crypto.Cipher.getInstance(Unknown Source)

Caused by: java.lang.SecurityException: Cannot set up certs for trusted CAs
01-08 16:10:19.758: D/CVM(769): at javax.crypto.SunJCE_b.<clinit>(Unknown Source)
01-08 16:10:19.768: D/CVM(769): ... 14 more
01-08 16:10:19.768: D/CVM(769): Caused by: java.lang.SecurityException: Cannot locate    policy or framework files!
01-08 16:10:19.768: D/CVM(769): at javax.crypto.SunJCE_b.g(Unknown Source)
01-08 16:10:19.768: D/CVM(769): at javax.crypto.SunJCE_b.f(Unknown Source)
01-08 16:10:19.768: D/CVM(769): at javax.crypto.SunJCE_t.run(Unknown Source)
java.lang.ExceptionInInitializeError
位于java.lang.Class.runStaticInitializers(未知源)
位于javax.crypto.Cipher.a(未知源)
位于javax.crypto.Cipher.getInstance(未知源)
原因:java.lang.SecurityException:无法为受信任的CA设置证书
01-08 16:10:19.758:D/CVM(769):在javax.crypto.SunJCE_b.(未知来源)
01-08 16:10:19.768:D/CVM(769):。。。14多
01-08 16:10:19.768:D/CVM(769):原因:java.lang.SecurityException:找不到策略或框架文件!
01-08 16:10:19.768:D/CVM(769):在javax.crypto.SunJCE_b.g(未知来源)
01-08 16:10:19.768:D/CVM(769):在javax.crypto.SunJCE_b.f(未知来源)
01-08 16:10:19.768:D/CVM(769):在javax.crypto.SunJCE_t.run(未知源)
在以下行: Cipher Cipher=Cipher.getInstance(“AES/CBC/PKCS5Padding”)

这些策略文件将在哪里?如何检查它们是否存在


任何帮助都将不胜感激。如果您需要其他信息,请告诉我。

看起来Sun JCE provider中存在问题,与ADF无关。通过将
$JRE_HOME/lib/JCE.jar
替换为
jce1_2_2.jar,我可以在jdk 1.4_2.19和JCE 1.2.2中复制。在这种情况下,一个

Exception in thread "main" java.lang.ExceptionInInitializerError
    at javax.crypto.Cipher.a(DashoA6275)
    at javax.crypto.Cipher.getInstance(DashoA6275)
    at Test.main(Test.java:22)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:324)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
Caused by: java.lang.SecurityException: Cannot set up certs for trusted CAs: java.security.PrivilegedActionException: java.net.MalformedURLException: no protocol: US_export_policy.jar
    at javax.crypto.SunJCE_b.<clinit>(DashoA6275)
    ... 8 more

我只知道一个存放策略文件的地方:
$JRE\u HOME/lib/security
它应该包含文件
cacerts
java.policy
local\u policy.jar
US\u export\u policy.jar
而且jdk 1.4非常旧,cacerts中的根证书在几年前就过期了。(应该是无关的,但谁知道)嗨,据我所知,ADF mobile没有为其JVM使用默认的JAVA_HOME。我在某个地方读到,它打包了自己的JVM,我浏览了ADF安装目录,但没有任何用处。拥有自己的JVM也可能意味着它可能会创建一个新的“有效”的cacerts文件。好吧,最后一部分是我的推测。在深入挖掘之后,我已经部分地关注了错误的来源。在部署时,JVM实际上成功地定位了策略文件,但它无法加载javax/security/cipher类。我在查看了cipher.getInstance的源代码后得出了这个结论(…)在这两种情况下都会打印消息“找不到策略或框架文件!”。现在的问题是“为什么JVM无法加载Cipher.class?”
public class Test {
    static {
        Security.addProvider(new BouncyCastleProvider());
    }
    public static void main(String[] args) throws Exception {
        try {
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding", "BC");
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}