2017-03-03 1 views
1

J'utilise l'api du magasin de clés android pour stocker une paire de clés RSA. Lorsque j'exécute mon android en mode débogage, cela montre que les octets de la paire de clés et du certificat ont été stockés dans le magasin de clés, mais lorsque je recharge le débogueur et que j'essaie de récupérer la clé, le magasin de clés semble vide.Android KeyStore ne sauvegarde pas la clé RSA

Je veux être en mesure de récupérer la clé par alias. Mon code ci-dessous montre comment la paire de clés est créée et stockée.

public RSA(char[] password) throws Exception { 
    KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType()); 
    ks.load(null); 
    Enumeration<String> aliases = ks.aliases(); 
    if(!aliases.hasMoreElements()) 
    { 
     mCurrentCertificate = generateCert(); 
     //Store the new keypair 
     FileInputStream fs = null; 
     ks.load(fs, password); 

     KeyStore.ProtectionParameter protParam = 
       new KeyStore.PasswordProtection(password); 

     java.security.cert.Certificate[] myCert = 
       new java.security.cert.Certificate[] { (java.security.cert.Certificate) mCurrentCertificate}; 

     KeyStore.PrivateKeyEntry pkEntry = 
       new KeyStore.PrivateKeyEntry(mCurrentRSAKeyPair.getPrivate(), 
         myCert); 

     ks.setEntry("MyKey2", pkEntry, protParam); 

     for(int i = 0; i < ks.size(); i++) 
     { 
      //MyKey is the previous key stored, MyKey2 is the next one 
      System.out.println(ks.getCertificate("MyKey")); 
     } 
    } 
} 

Répondre

0

Avec votre code, vous pouvez créer un fichier de clés dans le système de fichiers (il manque ks.store(fileOutputStream, password);, mais Android Keystore System a une API spécifique pour générer et utiliser les touches

Dans ce answer vous avez un exemple pour générer et charger une clé RSA