2012-07-20 1 views
2

내 앱에서 encription을 사용합니다. 나는 바이트 배열로 개인 키를 저장하고 복원하기 위해 다음 코드를 사용Android Jelly Bean의 RSA 비공개 키 복원 중 오류

PrivateKey private = KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(s_privateKeyIn1t)); 

그것은 안드로이드 플랫폼 2.1 내 모든 대상에 완벽하게 작동 -> 4.0.4,하지만 젤리 빈에 실패!

07-20 17:29:35.197: E/AnyBalance:Codec(990): Caused by: java.lang.RuntimeException: error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag 
07-20 17:29:35.197: E/AnyBalance:Codec(990): at org.apache.harmony.xnet.provider.jsse.NativeCrypto.d2i_PKCS8_PRIV_KEY_INFO(Native Method) 
07-20 17:29:35.197: E/AnyBalance:Codec(990): at org.apache.harmony.xnet.provider.jsse.OpenSSLRSAKeyFactory.engineGeneratePrivate(OpenSSLRSAKeyFactory.java:73) 

어떤 문제가 :

젤리 예외가 발생?

+0

, ICS에서 실행됩니까? – John

+0

[여기] (http://en.wikipedia.org/wiki/Android_version_history)에서 4.04는 아이스크림 샌드위치 인 Jelley Bean이 아니며 혼란을 피하기 위해 게시물을 수정합니다. – John

답변

2

글쎄, 왜 그런 일이 일어 났는지는 모르겠지만 어떻게 처리해야하는지 알게되었습니다. 나는 단지 이전의 안드로이드 버전에서 키를 재 부호화했다.이 재 부호화 된 키는 Jelly Bean에서 일했다.

나는 키를 재 인코딩하려면 다음 코드를 사용 :

(두 번째 줄은 중요한 부분입니다) 나를 위해 일한
Private key = KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(s_privateKeyIn1t)); 
byte [] xxx = s_privateKey.getEncoded(); //Then I watched this byte array in debugger and inserted it in a source code. 
//Now it works on Jelly Bean 
8

This is the code : 그것은 빌드에서이 문제가 될 수

PKCS8EncodedKeySpec privSpec = new PKCS8EncodedKeySpec(s_privateKeyIn1t); 
KeyFactory keyFactory = KeyFactory.getInstance("RSA", "BC"); 
PrivateKey privateKey = keyFactory.generatePrivate(privSpec); 
+0

KeyFactory kf = KeyFactory.getInstance ("RSA", "BC"); 일. 너는 내 하루를 구했다. –