2013-01-09 37 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(); 
     } 
    } 
}