2 votes

Le chargement de KeyStore provoque une erreur EOFException sur Android

J'ai du code pour mon application qui crée un keystore dans Android, crée quelques clés par défaut puis enregistre le keystore.

Plus tard, le code essaye de recharger le keystore, sur l'émulateur, ceci l'émulateur, mais lorsqu'il est exécuté sur un téléphone, j'obtiens une exception EOFException. Un conseil sur des conseils pour savoir où je me trompe ?

Vous trouverez ci-dessous un extrait de ce code :

Dans la classe, j'ai les variables suivantes

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

Alors les deux fonctions suivantes

    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; 
        }

0voto

Ogre_BGR Points 4799

Cela se produit généralement lorsque le fichier keystore est corrompu. Nous venons de rencontrer (à nouveau) un tel problème avec un keystore envoyé par un développeur externe qui était incapable de se rappeler comment il avait créé le fichier keystore.

Créez un nouveau fichier keystore et importez le(s) certificat(s) - cela résoudra le problème.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X