【问题标题】:Can not serialize AndroidKeyStore to OutputStream无法将 AndroidKeyStore 序列化为 OutputStream
【发布时间】:2019-03-15 16:07:50
【问题描述】:

我正在尝试将 Android KeyStore 对象保存到文件中,以便以后使用生成的私钥。我需要这样做,因为一旦退出应用程序,私钥就会被删除。为此,我根据thisthisKeyStore 对象写入输出流 例子。但是,当我尝试这样做时,出现以下错误:

java.lang.UnsupportedOperationException: 无法将 AndroidKeyStore 序列化为 OutputStream

它发生在mKeyStore.store(keyStoreOutputStream, keyStorePassword);

mKeyStore = KeyStore.getInstance("AndroidKeyStore");
mSignature = Signature.getInstance("SHA256withECDSA");
mKeyStore.load(null);

// Generate private key
PrivateKey key = (PrivateKey) mKeyStore.getKey(KEY_NAME, null);
Certificate [] cert = mKeyStore.getCertificateChain(KEY_NAME);
char[] keyStorePassword = null;

// Store private key into mKeyStore
mKeyStore.setKeyEntry(KEY_NAME, key, null, cert);

// Save mKeyStore to outputstream
String filepath = activity.getFilesDir().getPath().toString() + "/keystore.ks";
try (FileOutputStream keyStoreOutputStream = new FileOutputStream(filepath)) {
    mKeyStore.store(keyStoreOutputStream, keyStorePassword);
}

mSignature.initSign(key);

这是存储我的KeyStore 对象以供以后使用的最佳方式吗?如果是这样,我该如何解决Can not serialize AndroidKeyStore to OutputStream 错误?

谢谢。

【问题讨论】:

    标签: java android serialization keystore


    【解决方案1】:

    Android KeyStoreAndroidKeyStore 不同。

    AndroidKeyStore 是一个 Android 组件,可用于安全地生成和存储您的密钥。看 https://developer.android.com/training/articles/keystore

    Android Keystore 系统可让您将加密密钥存储在容器中,以便更难以从设备中提取。一旦密钥在密钥库中,它们就可以用于加密操作,而密钥材料仍然不可导出。

    键是持久的。任何生成到AndroidKeyStore 的密钥都将在应用程序重新启动后出现。这是存储密钥的推荐方式

    请注意,密钥是不可提取的。如果您需要以某种方式导出私钥,则需要使用标准密钥库文件,而不是 AndroidKeystore

    【讨论】:

    • 这是有道理的。感谢您的回答!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-08
    • 2020-03-15
    • 1970-01-01
    • 2018-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多