我遇到Cannot Delete an alias from the KeyStore中提到的同样问题。该问题的解决方案是“在keyStore上调用.store()方法来刷新更改”这看起来很好。
我的问题是,我正在使用AndroidKeyStore,它似乎不支持该操作。我的代码如下:
public static void resetKeyStore() {
KeyStore keyStore;
try {
keyStore = KeyStore.getInstance("AndroidKeyStore");
keyStore.load(null);
ArrayList<String> toDelete = new ArrayList<>();
Enumeration<String> e = keyStore.aliases();
while(e.hasMoreElements()){
toDelete.add(e.nextElement());
}
for(String s : toDelete) {
keyStore.deleteEntry(s);
}
// keyStore.store(null);
} catch (KeyStoreException | IOException | NoSuchAlgorithmException | CertificateException e) {
Log.wtf(TAG, e);
}
}
如果我没有调用keyStore.store(null)
,则此功能会成功退出,但密钥库中仍有一些密钥。
如果我接听电话,则会抛出此异常:
E/AndroidRuntime: Caused by: java.lang.UnsupportedOperationException
E/AndroidRuntime: at java.security.KeyStoreSpi.engineStore(KeyStoreSpi.java:256)
E/AndroidRuntime: at java.security.KeyStore.store(KeyStore.java:565)
E/AndroidRuntime: at com.mycompany.myapp.LocalKeyStore.resetKeyStore(LocalKeyStore.java:235)
任何帮助将不胜感激