2

我的应用程序有一些代码在 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; 
        } 
4

1 回答 1

0

这通常发生在密钥库文件损坏时。我们刚刚(再次)遇到了由外部开发人员发送的密钥库的此类问题,该开发人员无法回忆起他是如何创建密钥库文件的。

创建一个新的密钥库文件并导入证书 - 这将解决问题。

于 2017-09-04T16:34:00.383 回答