如何将密钥保存到密钥库?

时间:2016-01-14 06:57:16

标签: android cryptography keystore

是的,这是this question重复。然而,答案是错误和误导。答案建议将密钥写入其他应用程序可以访问该文件的文件。如果我没有弄错,密钥库的目的是generate and store private keys that can only be seen by your app,所以我甚至不确定为什么答案在那个问题中被接受。

另一个问题is about encryption and decryption但不是真的将数据保存到密钥库。

此处的另一个might be what I'm looking for如果我没有弄错,CipherOutputStreamFileOutputStream类似,但它会在写入之前先加密数据。来自文档:

  

此类包装输出流和密码,以便写入方法在将数据写入基础输出流之前通过密码发送数据。

我想知道的不是使用keytool生成的那个(我猜测它不同,除非我错了),而是android 4.3中引入的那个。无论哪种方式,我想学习以编程方式在密钥库中保存私钥。

有条件的信息

好的,所以我发现您可以在KeyPairGenerator调用{{1}}后自动生成密钥,如this app所示。但我想要做的是在我的服务器中生成一个密钥(因为我的应用程序处于脱机状态并偶尔会在线连接),然后将该密钥保存在密钥库中作为条目。我现在的问题是创建条目然后保存它。原因是,我想为我的应用程序创建一个像api键的键。如果我使用keystore生成的密钥,那么每次我为不同的设备创建它时都会有所不同。

2 个答案:

答案 0 :(得分:0)

  

多年来,作为Java的一部分提供的keytool应用程序可以提供   生成私钥和证书标志的所有功能   来自Java密钥库的请求,但最基本的功能,导入一个   保留的私钥和外部生成的证书仍然存在   忽视。

     

这在Java 6中已得到修复。

     

解决方案是将现有证书和密钥转换为   PKCS12文件,然后使用keytool功能合并一个   密钥库与另一个。 Java 6可以将PKCS12文件视为   密钥库,所以把它放在一起,你得到这个:

keytool -importkeystore -deststorepass changeit -destkeypass changeit
-destkeystore my-keystore.jks -srckeystore cert-and-key.p12 -srcstoretype PKCS12 -srcstorepass cert-and-key-password -alias 1

Refer this page for more details

答案 1 :(得分:0)

尝试使用Keystoreexplorer(一个简单的程序)来管理您的证书和商店。首先使用keytool创建它作为@Androidmechanic suggegest,然后使用keystoreexplorer将其添加到密钥库