2013-05-31 13 views
9

Ich versuche, einen privaten Schlüssel aus dem Android Systemspeicher mit folgendem Code verwenden zu importieren:Wie private Schlüssel von Android Speichern

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

wo aliasKeyChain.choosePrivateKeyAlias() Methode abgerufen wird. KeyChain.getPrivateKey gibt null nicht zurück, aber PrivateKey-Objekt enthält falschen Schlüssel (alle seine signifikanten Felder sind null). Ich dachte, dass der Schlüssel nicht exportierbar ist und versucht, es in den nächsten Code zu verwenden:

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

bekam aber Nullpointer, die von BouncyCastle Einbauten kommt.

Das Zertifikat mit dem Schlüssel wurden aus einer PFX-Datei mit Android-Standard laden von der Speicherkarte Funktion importiert.

Was mache ich falsch?

UPD: Ich habe versucht, das gleiche mit verschiedenen RSA-Zertifikate zu tun, und das Ergebnis ist das gleiche :(

+0

Ist privateKey nicht null ? –

+0

Welches Android OS verwenden Sie? Checkout (https://code.google.com/p/ics-openvpn/source/browse/src/de/blinkt/openvpn/VpnProfile.java?r=77fc897870655adb63d53a72c72ee3e80b646d5a#403) für Beispiel Verwendung von KeyChain.getPrivateKey() –

+0

Ein Zertifikat enthält normalerweise nicht den privaten Schlüssel. – Henry

Antwort

0

den folgenden Code Versuchen Sie, die perfekt für mich funktioniert:

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