我是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。然而,我对的一些事情感到困惑
- 什么是"my.keystore"文件?它是文件系统中的实际文件,还是密钥库的名称
- 当inKeyStore.store()被调用时,什么数据被写入到哪里?是"my.keystore"文件中写入inKeyStore的数据吗
- 密码的意义是什么
- 类似于Q2,当调用newKeyStore.load()时,什么数据被写入到哪里
谢谢!
在您的案例中,您有:
-内存中的KeyStore实例:KeyStore.getInstance(String type, String provider)
-文件系统上的密钥库文件:{app_priv_folder}my.keystore
要读取(文件==>内存):KeyStore:load(InputStream流,char[]密码)
从提供的InputStream 初始化此KeyStore
写入(内存==>文件):KeyStore:store(OutputStream流,char[]密码)
将此KeyStore写入指定的OutputStream
答案:
- 正如您所猜测的,"my.keystore"是文件系统上(应用程序专用文件夹中)密钥库文件的名称
- 不,恰恰相反
inKeyStore.store(out, password.toCharArray())
将inKeyStore数据存储在文件"my.keystore"中:FileOutputStream out = mContext.openFileOutput("my.keystore", 0);
- 密钥库文件受该密码保护
- newKeyStore.load():从"my.keystore"读取数据,将其加载到内存中的keystore实例中