2013-01-09 8 views
2

ADF Mobile을 사용하여 개발중인 모바일 애플리케이션에서 보안 정보를 암호화하려고합니다. "javax.crypto.Cipher"를 사용하고 있습니다. 내 이해 당으로 ADF 모바일은 우리가 다음 줄에 다음 문제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) 

에 직면하고 배포하는 동안 배포 purposes.But에 대한 응용 프로그램의 APK/IPA와 함께 자신의 JVM을의 팩 : 암호 암호 = 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은 기본 JAVA_HOME을 JVM으로 사용하지 않습니다. ADF 설치 디렉토리를 통해 탐색 한 자신의 JVM이지만, 그것을 사용하지 않을 것입니다. 자신의 JVM을 가지고 있다면 아마도 "유효"한 새로운 cacerts 파일을 생성 할 것입니다. 다시 말하지만, 마지막 부분은 내 말에 대한 추측입니다. –

답변

0

Sun JCE 공급자의 문제처럼 보입니다. ADF와 관련이 없습니다. 나는 에 $JRE_HOME/lib/jce.jar을 대체하여 jdk 1.4_2.19와 JCE 1.2.2에서 재현 할 수 있습니다. 이 경우 A는

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_HOME/lib/jce.jar를 반환하고 $JRE_HOME/lib/ext에 관련된 모든 SunJCE 프로 제거와 함께) BouncyCastle 공급자를 사용할 수 있습니다 해결되었다.

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