【发布时间】:2010-06-12 02:47:33
【问题描述】:
创建密钥后,如何使用 Keystore 类的方法存储它们以及如何加载密钥?
【问题讨论】:
创建密钥后,如何使用 Keystore 类的方法存储它们以及如何加载密钥?
【问题讨论】:
存储:
KeyStore ks = KeyStore.getInstance("JKS");
ks.setKeyEntry("keyAlias", key, passwordForKeyCharArray, certChain);
OutputStream writeStream = new FileOutputStream(filePathToStore);
ks.store(writeStream, keystorePasswordCharArray);
writeStream.close();
请注意,certChain 可能为空,除非您传递 PrivateKey
加载中:
KeyStore ks = KeyStore.getInstance("JKS");
InputStream readStream = new FileInputStream(filePathToStore);
ks.load(readStream, keystorePasswordCharArray);
Key key = ks.getKey("keyAlias", passwordForKeyCharArray);
readStream.close();
阅读javadocs
编辑:
请注意,如果您要存储 SecretKey 或使用 SunJCE 提供程序(Java Cryptography Extension)的任何部分,则需要将 KeyStore 类型设置为 JCEKS。
KeyStore ks = KeyStore.getInstance("JCEKS");
【讨论】:
我有一种情况,我不知道密钥别名,但我知道密钥库中只有一个密钥。我使用以下代码加载密钥(如上图加载密钥库后):
Enumeration<String> aliases = keyStore.aliases();
String alias = aliases.nextElement();
KeyStore.PrivateKeyEntry keyEnt = (KeyStore.PrivateKeyEntry) keyStore.getEntry(alias,
new KeyStore.PasswordProtection(keystorePass.toCharArray()));
PrivateKey privateKey = keyEnt.getPrivateKey();
我添加了post on my blog,详细说明了如何加载私钥、公钥以及如何使用它们。
【讨论】: