2015-06-26 12 views
38

मुझे कुछ उपकरणों के लिए कुंजी उत्पन्न करने का प्रयास करने में त्रुटि मिलती है। मैं 4.4.2 चल रहे सैमसंग गैलेक्सी नोट पर त्रुटि को पुन: उत्पन्न करने में सक्षम हूं।एंड्रॉइड कीस्टोर त्रुटि "कीस्टोर में कुंजी उत्पन्न नहीं कर सका"

java.lang.IllegalStateException: could not generate key in keystore 
     at android.security.AndroidKeyPairGenerator.generateKeyPair(AndroidKeyPairGenerator.java:100) 
     at java.security.KeyPairGenerator$KeyPairGeneratorImpl.generateKeyPair(KeyPairGenerator.java:275) 
     at com.eric.demo.MainActivity.generateKeyPair(MainActivity.java:65) 
     at com.eric.demo.MainActivity.onClickButton(MainActivity.java:43) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:515) 
     at android.view.View$1.onClick(View.java:3964) 
     at android.view.View.performClick(View.java:4640) 
     at android.view.View$PerformClick.run(View.java:19421) 
     at android.os.Handler.handleCallback(Handler.java:733) 
     at android.os.Handler.dispatchMessage(Handler.java:95) 
     at android.os.Looper.loop(Looper.java:136) 
     at android.app.ActivityThread.main(ActivityThread.java:5476) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:515) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084) 
     at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:132) 
     at dalvik.system.NativeStart.main(Native Method) 

मैं करने के लिए एक छोटा सा एप्लिकेशन बनाया केवल तहत Android डेवलपर पेज https://developer.android.com/training/articles/keystore.html से लाइन द्वारा कोड लाइन को कॉपी करके कुंजी उत्पन्न "एक नई निजी कुंजी जनरेट कर रहा है।" (

public boolean generate(String key, int uid, int keyType, int keySize, int flags, 
     byte[][] args) { 
    try { 
     return mBinder.generate(key, uid, keyType, keySize, flags, args) == NO_ERROR; 
    } catch (RemoteException e) { 
     Log.w(TAG, "Cannot connect to keystore", e); 
     return false; 
    } 
} 

mBinder.generate):

if (!mKeyStore.generate(privateKeyAlias, KeyStore.UID_SELF, keyType, 
     mSpec.getKeySize(), mSpec.getFlags(), args)) { 
    throw new IllegalStateException("could not generate key in keystore"); 
} 

और KeyStore.java में:

public void onClickButton (View view) { 
    try { 
     generateKeyPair(this, "test3"); 
    } catch (Exception e){ 
     Log.wtf("exception", e); 
    } 
} 

private void generateKeyPair(Context context, String alias) 
    throws Exception { 
    Calendar cal = Calendar.getInstance(); 
    Date now = cal.getTime(); 
    cal.add(Calendar.YEAR, 1); 
    Date end = cal.getTime(); 

    KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA", "AndroidKeyStore"); 
    kpg.initialize(new KeyPairGeneratorSpec.Builder(getApplicationContext()) 
      .setAlias(alias) 
      .setStartDate(now) 
      .setEndDate(end) 
      .setSerialNumber(BigInteger.valueOf(1)) 
      .setSubject(new X500Principal("CN=test3")) 
      .build()); 

    KeyPair kp = kpg.generateKeyPair(); 
} 

त्रुटि, kpg.generateKeyPair() में होने की AndroidKeyPairGenerator.java अंदर लगता है कॉल 2 लौटने लगता है जिसका मतलब है कि कीस्टोर लॉक है?

// ResponseCodes 
public static final int NO_ERROR = 1; 
public static final int LOCKED = 2; 
public static final int UNINITIALIZED = 3; 
public static final int SYSTEM_ERROR = 4; 
public static final int PROTOCOL_ERROR = 5; 
public static final int PERMISSION_DENIED = 6; 
public static final int KEY_NOT_FOUND = 7; 
public static final int VALUE_CORRUPTED = 8; 
public static final int UNDEFINED_ACTION = 9; 
public static final int WRONG_PASSWORD = 10; 

त्रुटि कुछ हद तक कीस्ट्रोक के साथ इस मुद्दे से संबंधित हो सकती https://code.google.com/p/android/issues/detail?id=177459&q=could%20not%20generate%20key%20in%20keystore&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars

कुछ बातें मैं व्यक्तिगत रूप से की कोशिश की है और निम्न में से संयोजन:
1. सेटिंग एन्क्रिप्शन की आवश्यकता है। परिणाम एक और त्रुटि है: "एन्क्रिप्शन आवश्यक होने पर एंड्रॉइड कीस्टोर प्रारंभ और अनलॉक स्थिति में होना चाहिए"
2. लॉक स्क्रीन (पैटर्न, पिन, कोई नहीं, पासवर्ड, स्वाइप) सेट करना। समान व्यवहार
3. प्रोग्राम को अनलॉक करने या startActivity(new Intent("com.android.credentials.UNLOCK")); या startActivity(new Intent("com.android.credentials.RESET")); अनलॉक करने के लिए प्रयास कर रहा है के साथ क्रेडेंशियल संग्रहण रीसेट करने के लिए प्रयास करने से एक "क्रेडेंशियल संग्रहण के लिए पासवर्ड दर्ज" संदेश, जिसमें कोई उचित पासवर्ड काम करता है, और यहां तक ​​कि साख को साफ करने में मदद नहीं करता पता चलता है।

+0

मैंने इस जगह को अन्य स्थानों पर देखा है, लेकिन ऐसा नहीं लगता कि आपने इस सटीक संयोजन को आजमाया है: यदि लॉक स्क्रीन अक्षम है: ऐप अनइंस्टॉल करें, लॉक स्क्रीन सेट करें, लॉक स्क्रीन को अनसेट करें, फिर पुन: इंस्टॉल करें। यदि लॉक स्क्रीन सक्षम है, तो अनइंस्टॉल करें, लॉक स्क्रीन को अनसेट करें, लॉक स्क्रीन सेट करें, फिर पुन: इंस्टॉल करें। मेरे पास पुन: पेश करने के लिए कोई उपकरण नहीं है, लेकिन मैं अपने उपयोगकर्ताओं में से एक के लिए एक समाधान की तलाश में हूं। –

+0

जब आपको "क्रेडेंशियल स्टोरेज के लिए पासवर्ड दर्ज करें" कहा जाता है, तो सही पासवर्ड हो सकता है जब आप पैटर्न सेट करते समय फॉलबैक पिन चुनते हैं। कम से कम, यह मेरा मामला था। – JerabekJakub

उत्तर

-4

मुझे लगता है कि यह सही दिशा है: प्रोजेक्ट> एंड्रॉइड टूल्स> निर्यात हस्ताक्षरित एप्लिकेशन पैकेज पर राइट क्लिक करें निर्यात एंड्रॉइड एप्लिकेशन विज़ार्ड प्रकट होता है। प्रोजेक्ट का चयन करें जिसे मैं निर्यात करना चाहता हूं, अगला क्लिक करें। कीस्टोर चयन स्क्रीन प्रकट होती है।

2

जबकि मुझे पूरा उत्तर नहीं पता, मैं आपकी खोज जारी रखने में मदद कर सकता हूं। एमबींडर के दूसरी तरफ बांधने वाला कार्यान्वयन native keystore है। अगर मुझे पूरी तरह से याद है, तो इसका व्यवहार या तो 1) सॉफ़्टवेयर स्तर पर महत्वपूर्ण संचालन का समर्थन करना है, या 2) एक OEM- प्रदत्त कीमास्टर लाइब्रेरी में प्रतिनिधि जो (अनुमानतः) OEM के हार्डवेयर समर्थित बैकस्टोर पर इंटरफेस करता है। इस here, here, और here पर अधिक जानकारी।

नोट: मैं बाहरी लिंक सामग्री को उत्तर में खींचने की एसओ की सामान्य नीति से गुजरता हूं, क्योंकि मैं आपको तीन लेखों से जोड़ रहा हूं जो सभी हैं> 1 पृष्ठ और यह एक हास्यास्पद लगता है 6- पृष्ठ का उत्तर ;-)

0

यदि आपका कोड ठीक है तो याद रखें कि आपको अपने डिवाइस के लिए पिन/पीडब्लू/फिंगरप्रिंट (सिक्योर अनलॉक) सेट अप करने की आवश्यकता है ताकि कीस्टोर काम करना शुरू कर दे। यदि आप कीपैयर उत्पन्न करने का प्रयास करते हैं तो एक साधारण स्वाइप ऐसी त्रुटि देगी।

संबंधित मुद्दे