2016-07-17 2 views
4

SSH 로그인을 위해 공개/개인 RSA 키를 생성하려면 내 앱이 필요한 프로젝트에서 작업하고 있습니다.Android에서 SSH 로그인을위한 RSA 개인/공개 키 쌍 생성

: 나는 로그 캣이를 인쇄 할 때 내가 좋아하는 뭔가를 찾기 위해 키를 기대하고 때

private void createKeyTest() 
    { 
     try 
     { 
      KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA"); 
      kpg.initialize(2048); 
      KeyPair keyPair = kpg.genKeyPair(); 
      byte[] pri = keyPair.getPrivate().getEncoded(); 
      byte[] pub = keyPair.getPublic().getEncoded(); 

      String privateKey = new String(pri); 
      String publicKey = new String(pub); 

      Log.d("SSHKeyManager", "Private Key: " + privateKey); 
      Log.d("SSHLeyManager", "Public Key: " + publicKey); 
     } 
     catch (NoSuchAlgorithmException ex) 
     { 
      Log.e("SSHKeyManager", ex.toString()); 
     } 

내가 아닌 임의 텍스트 문자를 얻을 :

나는 열쇠를 얻기 위해 지금까지 다음과 같은 코드가 있습니다

-----BEGIN RSA PRIVATE KEY----- 
MIIEoQIBAAKCAQEAm8QDThbuEjAbQxbsdDltL2xdFkQOep3L0wseSJAxmDuvH6yB 
9I2fEEmF+dcVoNo2DGCDZMw7EgdFsfQZNF+PzKdZwtvSUTDW/TmMHWux2wYimNU3 
jhQ3kfxGmiLgMJHQHWLkESwd06rCr7s1yOnPObdPjTybt7Odbp9bu+E59U10Ri3W 
JFxIhi9uYQvpRn4LT/VIfH/KBdglpbD9xBAneVbKFXW7.... 
-----END RSA PRIVATE KEY----- 

도움을 주셔서 감사합니다.

+0

당신이 올바르게'--- ---'섹션에 포함 된 문자열을 받고 있는지 생각 해 봤나 : 여기

는 bouncycastle 예입니다? –

+1

일부 바이트 배열의'new String()'은 바이트의 Base-64 인코딩 (또는 RSA 파일에 사용되는 인코딩)을 제공하지 않습니다. – CommonsWare

+0

아, 예, 잊어 버렸습니다. 64 인코딩을 시도했지만, 문자열은 항상 리눅스 커널에서 ssh-keygen -t rsa 명령을 사용하여 생성했을 때보 다 훨씬 짧습니다. – Boardy

답변

1
import android.util.Base64; 

당신은 공개 키와 개인 키의 Base64로 버전을 드릴 것입니다

String privateKey = Base64.encodeToString(pri, Base64.DEFAULT); 
String publicKey = Base64.encodeToString(pub, Base64.DEFAULT); 

을 변경할 수 있습니다.

-----BEGIN RSA PRIVATE KEY----- 
-----END RSA PRIVATE KEY----- 

이러한 형식은 PEM이라고 부르며, 사용자 정의하거나 라이브러리 "bouncycastle"을 사용할 수 있습니다. Export RSA public key to PEM String using java