是的,这是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如果我没有弄错,CipherOutputStream
与FileOutputStream
类似,但它会在写入之前先加密数据。来自文档:
此类包装输出流和密码,以便写入方法在将数据写入基础输出流之前通过密码发送数据。
我想知道的不是使用keytool生成的那个(我猜测它不同,除非我错了),而是android 4.3中引入的那个。无论哪种方式,我想学习以编程方式在密钥库中保存私钥。
有条件的信息
好的,所以我发现您可以在KeyPairGenerator
调用{{1}}后自动生成密钥,如this app所示。但我想要做的是在我的服务器中生成一个密钥(因为我的应用程序处于脱机状态并偶尔会在线连接),然后将该密钥保存在密钥库中作为条目。我现在的问题是创建条目然后保存它。原因是,我想为我的应用程序创建一个像api键的键。如果我使用keystore生成的密钥,那么每次我为不同的设备创建它时都会有所不同。
答案 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
答案 1 :(得分:0)
尝试使用Keystoreexplorer(一个简单的程序)来管理您的证书和商店。首先使用keytool创建它作为@Androidmechanic suggegest,然后使用keystoreexplorer将其添加到密钥库