Загрузка хранилища ключей вызывает ошибку EOFException на Android - PullRequest
2 голосов
/ 08 февраля 2010

У меня есть код для моего приложения, который создает хранилище ключей в Android, создает несколько ключей по умолчанию, а затем сохраняет хранилище ключей.

Позже код пытается перезагрузить хранилище ключей, на эмуляторе это работает нормально, однако при запуске на телефоне я получаю EOFException.Любой совет, где я иду не так?

Ниже приведен код:

В классе у меня есть следующие переменные

static KeyStore keyStore; 
String filenameKeyStore = "KeyStore.kstore"; 

Затем следующие две функции

    public KeyHandler(Context context) { 
                if(keyStore == null) { 
                        Log.d("KeyStore", "Keystore is null so loading"); 
                        if(initialiseKeyStore(context) == false) { 
                                // KeyStore failed to initialise 
                                Log.e("ERROR", "Store failed to initialise"); 
                        } 
                } 
        } 
private boolean initialiseKeyStore(Context context) { 
                FileInputStream input = null; 
                try { 
                        // Get an instance of KeyStore 
                        keyStore = KeyStore.getInstance("BKS"); 
                        // Load the KeyStore file 
                        try { 
                                // Try and open the private key store 
                                input = context.openFileInput(filenameKeyStore); 
                        } catch (FileNotFoundException e) { 
                                // If  the file doesn't exist then create the file, a ECDH key and 
store the key 
                                Log.w("Warning","File does not exist, creating new file"); 
                                try { 
                                        // Load the default Key Store 
                                        keyStore.load(null, null); 
                                        // Create the file 
                                        FileOutputStream output = 
context.openFileOutput(filenameKeyStore, 0); 
                                        // Reset private key 
                                        resetPrivateKey(context); 
                                        // Save the key 
                                        keyStore.store(output, "password".toCharArray()); 
                                        // Close the keystore and set the input stream 
                                        output.close(); 
                                        input = context.openFileInput(filenameKeyStore); 
                                        // Reset the keyStore 
                                        keyStore = KeyStore.getInstance("BKS"); 
                                } catch (FileNotFoundException ee) { 
                                        Log.e("ERROR", "File not found, even though we just created it"); 
                                        return false; 
                                } catch (NoSuchProviderException e1) { 
                                        // BC isn't working exit 
                                        e1.printStackTrace(); 
                                        System.exit(1); 
                                } catch (InvalidAlgorithmParameterException e1) { 
                                        Log.e("ERROR", "The algorithm used for secure algorithm is 
incorrect"); 
                                        e1.printStackTrace(); 
                                        return false; 
                                } 
                        } 
                        // Load the store 
                        keyStore.load(input, "password".toCharArray()); 
                } catch (KeyStoreException e) { 
                        // TODO Auto-generated catch block 
                        e.printStackTrace(); 
                        return false; 
                } catch (CertificateException e) { 
                        // TODO Auto-generated catch block 
                        e.printStackTrace(); 
                        return false; 
                }  catch (EOFException e) { 
                      // Where the exception is caught 
                        e.printStackTrace(); 
                        return false; 
                } catch (IOException e) { 
                        // TODO Auto-generated catch block 
                        e.printStackTrace(); 
                        return false; 
                } catch (NoSuchAlgorithmException e) { 
                        // TODO Auto-generated catch block 
                        e.printStackTrace(); 
                        return false; 
                } catch (NoSuchProviderException e) { 
                        // Serious error, return 
                        e.printStackTrace(); 
                        System.exit(1); 
                } 
                return true; 
        } 

1 Ответ

0 голосов
/ 04 сентября 2017

Обычно это происходит, когда файл хранилища ключей поврежден. У нас только что (опять же) возникла такая проблема с хранилищем ключей, отправленным внешним разработчиком, который не смог вспомнить, как именно он создал файл хранилища ключей.

Создайте новый файл хранилища ключей и импортируйте сертификат (ы) - это решит проблему.

...