2013-11-21 7 views
14

मुझे बेस 64 स्ट्रिंग में एन्कोडेड एक आरएसए प्राइवेटकी पीकेसीएस # 8 एक वेब सेवा (स्वयं द्वारा बनाई गई) से प्राप्त होता है। मेरा एंड्रॉइड ऐप इस कुंजी को सुरक्षित रूप से फोन में कहीं सेव करना होगा।एंड्रॉइड कीस्टोर - आरएसए प्राइवेटकी को कैसे बचाएं

एंड्रॉइड के 4.3 संस्करण से, यह नई कीस्टोर एपीआई का उपयोग कर संभावित बचत कुंजी है। मुझे एक article with code axample मिला है जो दिखाता है कि कुंजी को स्टोर करने के लिए आवश्यक विशिष्टता के साथ कीपैयर कैसे उत्पन्न करें। और चाबियाँ ठीक करने के बाद।

// generate a key pair 
Context ctx = getContext(); 
Calendar notBefore = Calendar.getInstance() 
Calendar notAfter = Calendar.getInstance(); 
notAfter.add(1, Calendar.YEAR); 
KeyPairGeneratorSpec spec = new KeyPairGeneratorSpec.Builder(ctx) 
      .setAlias("key1") 
      .setSubject(
        new X500Principal(String.format("CN=%s, OU=%s", alais, 
          ctx.getPackageName()))) 
      .setSerialNumber(BigInteger.ONE).setStartDate(notBefore.getTime()) 
      .setEndDate(notAfter.getTime()).build(); 

KeyPairGenerator kpGenerator = KeyPairGenerator.getInstance("RSA", "AndroidKeyStore"); 
kpGenerator.initialize(spec); 
KeyPair kp = kpGenerator.generateKeyPair(); 

// in another part of the app, access the keys 
KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore"); 
keyStore.load(null); 
KeyStore.PrivateKeyEntry keyEntry = (KeyStore.PrivateKeyEntry)keyStore.getEntry("key1", null); 
RSAPublicKey pubKey = (RSAPublicKey)keyEntry.getCertificate().getPublicKey(); 
RSAPrivateKey privKey = (RSAPrivateKey) keyEntry.getPrivateKey(); 

लेकिन मुझे समझ में नहीं आता कि मैं इसे मौजूदा कुंजी कैसे सहेज सकता हूं। कोई भी मेरी मदद कर सकता हैं? अग्रिम धन्यवाद

+0

http://nelenkov.blogspot.com/2012/05/storing-application-secrets-in-androids.html –

उत्तर

8

KeyStore में निजी कुंजी को प्रमाणपत्र (यहां तक ​​कि नकली स्वयं हस्ताक्षरित प्रमाणपत्र) के साथ संग्रहीत किया जाना चाहिए। AndroidKeyStore में अपने प्रमुख स्टोर करने के लिए आप निम्न चरणों का पालन करना चाहिए:

  1. डिकोड Base64 PKCS # 8 निजी कुंजी के साथ एक PrivateKey उदाहरण
  2. या तो वेब सेवा एक प्रमाण पत्र (या प्रमाणपत्र श्रृंखला) भेजता है पाने के लिए या पीकेसीएस # 8 ब्लॉब में भी सार्वजनिक कुंजी शामिल है।
  3. यदि आवश्यक हो तो आपको निजी कुंजी के लिए प्रमाण पत्र जेनरेट करने की आवश्यकता है। BouncyCastle लाइब्रेरी यह कर सकती है (एक कोड नमूना here पाया जा सकता है)।

अब आप कीस्टोर में अपनी कुंजी जोड़ सकते हैं।

PrivateKey myKey = getKey(); 
X509Certificate certificate = getCertificate(); 
KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore"); 
keyStore.load(null); 
keystore.setKeyEntry("anAlias", myKey, null, new Certificate[] { certificate }); 
संबंधित मुद्दे