2013-05-31 23 views
9

Sto cercando di importare una chiave privata da stoccaggio sistema Android utilizzando il codice seguente:Come utilizzare le chiavi private da stoccaggio Android

PrivateKey privateKey = KeyChain.getPrivateKey(activity, alias); 

dove alias viene recuperato utilizzando KeyChain.choosePrivateKeyAlias() metodo. KeyChain.getPrivateKey non restituisce null ma l'oggetto PrivateKey contiene chiavi errate (tutti i campi significativi sono null). Ho pensato che la chiave non è esportabile e provato ad usarlo nel codice seguente:

Cipher rsa; 
rsa = Cipher.getInstance("RSA"); 
rsa.init(Cipher.ENCRYPT_MODE, privateKey); 
byte[] enc = rsa.doFinal(str.getBytes()); 

ma ho ottenuto NullPointerException che viene da interni BouncyCastle.

Il certificato con la chiave è stato importato da un file PFX utilizzando lo standard Android carico dalla scheda di memoria.

Cosa sto facendo male?

UPD: ho cercato di fare lo stesso con diversi certificati RSA e il risultato è lo stesso :(

+0

È PrivateKey non nullo ? –

+0

quale sistema operativo Android stai utilizzando? Checkout (https://code.google.com/p/ics-openvpn/source/browse/src/de/blinkt/openvpn/VpnProfile.java?r=77fc897870655adb63d53a72c72ee3e80b646d5a#403) per Esempio di utilizzo di KeyChain.getPrivateKey() –

+0

Un certificato normalmente non contiene la chiave privata. – Henry

risposta

0

provare il seguente codice che sta lavorando per me perfettamente:

KeyStore ks; 
ks = KeyStore.getInstance("AndroidCAStore"); 
ks.load(null, null); 
keyChain = KeyChain.getCertificateChain(ctx, certificateAlias); 
privateKey = KeyChain.getPrivateKey(ctx, certificateAlias);