2013-01-09 34 views
2

我试图加密正在使用ADF Mobile开发的移动应用程序中的一些安全信息。我正在使用“javax.crypto.Cipher”。 按我的理解ADF移动礼包它与部署purposes.But应用的APK/IPA沿着自己的JVM部署过程中,我们所面临的以下问题JDeveloper ADF Mobile - javax.crypto - 无法找到策略文件

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) 

在下面一行: 密码密码= Cipher.getInstance ( “AES/CBC/PKCS5Padding”);

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

任何帮助将不胜感激。请让我知道,如果你需要额外的信息。

+0

我知道策略文件只有一个地方:'$ JRE_HOME/lib目录/ security'它应该包含文件''cacerts''java.policy''java.security''local_policy.jar' US_export_policy.jar' – user1516873

+1

jdk 1.4很旧,cacerts的根证书已过期。 (应该是无关紧要的,但是谁知道) – user1516873

+0

嗨,据我所知ADF mobile并没有为它的JVM使用默认的JAVA_HOME。我在某处读到它打包了它自己的JVM,我通过它浏览了ADF安装目录,但是没有用处。拥有它自己的JVM可能意味着它可能会创建一个新的“有效”的cacerts文件。再次,最后一部分是对我的推测。 –

回答

0

在Sun JCE提供程序中看起来像问题,并且不与ADF相关。我可以在jdk 1.4_2.19和JCE 1.2.2中通过将$JRE_HOME/lib/jce.jar替换为jce1_2_2.jar来重现。在这种情况下,得到了

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 

至于解决方法,你可以使用BouncyCastle的供应商(与返回的原$JRE_HOME/lib/jce.jar背部和去除$JRE_HOME/lib/ext有关的一切了SunJCE)。

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(); 
     } 
    } 
}