密钥库操作

KeyStore operations

我是 Java/Android KeyStores 的新手,在阅读了文档和一些教程之后,我仍然对操作的具体作用感到困惑,尤其是加载和存储调用。我正在 Java 方法中查看以下代码,但理解起来有些困难。 inKeyStore 是 KeyStore 类型的输入参数。

String password = "password";
KeyStore newKeyStore;
FileOutputStream out = mContext.openFileOutput("my.keystore", 0);
FileInputStream in = null;
try {
  inKeyStore.store(out, password.toCharArray());
} catch (KeyStoreException e) {
  if (out) out.close();
  in = mContext.openFileInput("my.keystore");
  newKeyStore = KeyStore.getInstance("BKS");
  newKeyStore.load(in, password.toCharArray());
  if (in) in.close();
}

我知道 inKeyStore.store() 在未初始化时会抛出 KeyStoreException。但是,我对一些事情感到困惑

  1. 什么是 "my.keystore" 文件?它是文件系统中的实际文件,还是密钥库的名称?
  2. 调用inKeyStore.store()时,什么数据写入到哪里?是"my.keystore"文件中的数据写入了inKeyStore吗?
  3. 密码有什么意义?
  4. 类似Q2,调用newKeyStore.load()时,什么数据写到哪里了?

谢谢!

在你的情况下,你有:
-内存中的KeyStore实例:KeyStore.getInstance(String type, String provider)
-文件系统上的keystore文件:{app_priv_folder}\my.keystore

读取(文件==>内存): KeyStore:load(InputStream 流, char[] 密码)

Initializes this KeyStore from the provided InputStream

写入(内存==>文件): KeyStore:store (OutputStream 流, char[] 密码)

Writes this KeyStore to the specified OutputStream

答案:

  1. 如你所料,"my.keystore"是文件系统上(在应用程序私有文件夹中)keystore文件的名称
  2. 不对,恰恰相反
    inKeyStore.store(out, password.toCharArray()) 将 inKeyStore 数据存储在文件中 "my.keystore": FileOutputStream out = mContext.openFileOutput("my.keystore", 0);
  3. 密钥库文件受该密码保护
  4. newKeyStore.load(): 从"my.keystore"读取数据加载到内存中的KeyStore实例中。