2016-07-17 3 views
4

Je travaille sur un projet où j'ai besoin de mon application pour générer une clé RSA publique/privée pour la connexion SSH.Génération d'une paire de clés privées/publiques RSA pour la connexion SSH sur Android

J'ai le code suivant à ce jour pour obtenir les clés:

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

Lorsque j'imprime ce dans Logcat Je reçois des caractères non textuels au hasard quand je me attends à la clé de ressembler à quelque chose comme:

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

Merci pour toute aide que vous pouvez fournir.

+0

Avez-vous pensé que vous obtenez correctement la chaîne contenue dans la section '' --- ---? –

+1

'new String()' sur un tableau d'octets ne vous donnera pas l'encodage en base 64 des octets (ou quel que soit l'encodage utilisé pour ces fichiers RSA). – CommonsWare

+0

Ah oui, j'ai oublié ça, j'ai essayé l'encodage en base 64, mais la chaîne semble toujours beaucoup plus courte que quand elle est générée en utilisant la commande linux ssh-keygen -t rsa sur une boite Linux – Boardy

Répondre

1
import android.util.Base64; 

Vous pouvez modifier

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

Cela vous permettra d'avoir la version base64 de la clé publique et une clé privée. Ces formats s'appellent PEM, vous pouvez l'ajouter ou utiliser la bibliothèque "bouncycastle".

Voici par exemple bouncycastle: Export RSA public key to PEM String using java