2015-02-03 3 views
1

RSA 비공개 공개 키를 저장해야합니다. 여기 그것을 만듭니다.Android RSA 비공개 공개 키 저장

KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA"); 
kpg.initialize(1024); 
KeyPair kp = kpg.genKeyPair(); 
publicKey = kp.getPublic(); 
privateKey = kp.getPrivate(); 

이제 다음 번에 두 키를 모두 사용하고 싶습니다. 따라서 장치에 저장해야합니다.

 byte[] publicKeyBytes = publicKey.getEncoded(); 
     byte[] privateKeyBytes = privateKey.getEncoded(); 

그럼 바이트 배열을 가져 와서 텍스트 파일로 저장할 수 있습니다. 다음 번에 그것을 읽고 바이트 배열로 다시 변환합니다.

이제 내 질문 : 어떻게 다시 바이트 배열을 키로 변환 할 수 있습니까?

이 정말 작동하지 않습니다

로그 캣에
KeyFactory keyFactory = KeyFactory.getInstance("RSA"); 
    X509EncodedKeySpec spec = new X509EncodedKeySpec(publicKeyBytes); 
    publicKey = keyFactory.generatePublic(spec); 
    spec = new X509EncodedKeySpec(privateKeyBytes); 
    privateKey = keyFactory.generatePrivate(spec); 

는,이 표시 될 것입니다 :

RSAPublicKeySpec 또는 PKCS8EncodedKeySpec를 사용해야합니다; 는 java.security.spec.X509EncodedKeySpec

이 코드에는 어떤 문제가 있습니까?

도움 주셔서 감사합니다.

답변

0

PKCS8EncodedKeySpec을 개인 키로 사용해보세요.

RSAPublicKeySpec (공개 키는 X509EncodedKeySpec 대신).

키를 텍스트 파일에 저장하는 것이 가장 안전한 아이디어가 아닐 수 있습니다. Android는 사용하기 쉬운 nice KeyStore Api을 제공합니다.

+0

내 대답이 업데이트되었습니다. – jHilscher

+0

나는 그것을 검증하지는 않았지만 공개 키에 대한'X509EncodedKeySpec'이 정확하다고 믿습니다. –

+1

감사합니다. JHilscher, 작동하지 않습니다! - 그렇습니다. GregS는 공개 키에 X509EncodedKeySpec을, 개인 키에 PKCS8EncodedKeySpec을 사용합니다. – NewDeveloper

-1

Base64에서 키를 인코딩하고 String처럼 저장하려고하면 검색시 Base64에서 Byte 배열로 키를 디코딩하면됩니다.