哪种方法将私有和公共密钥存储在AndroidKeystore中?
我已经实施了以下代码以初始化密钥库并生成私钥和公共密钥。
KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
keyStore.load(null);
KeyPair keyPair;
Calendar start = Calendar.getInstance();
Calendar end = Calendar.getInstance();
end.add(Calendar.YEAR, 50);
KeyPairGenerator generator= KeyPairGenerator.getInstance("RSA","AndroidKeyStore");
KeyPairGeneratorSpec keyPairGeneratorSpec = new KeyPairGeneratorSpec.Builder(context).
setAlias("alias").
setSubject(new X500Principal("O=Authority")).
setSerialNumber(BigInteger.ONE).
setStartDate(start.getTime()).
setEndDate(end.getTime()).build();
if (generator != null) {
generator.initialize(keyPairGeneratorSpec);
}
keyPair = generator.generateKeyPair();
到您的问题,这一行 generator.generateKeyPair();
实现按键生成和存储过程。
在java.security.KeyPairGenerator
中看到代码时,您可能会感到困惑
public KeyPair generateKeyPair() {
// ...
return null;
}
,但实际上,由于按下Kepairgenerator是一个抽象类,因此这里使用的" true"类是 java.security.KeyPairGenerator$Delegate
,像this
generateKeyPair
您还可以在此过程之前和之后检查" AndroidKeystore"中的别名列表的差异。
我想分享有关如何查看任何密钥库列表的要旨。希望它可以帮助您进行测试:https://gist.github.com/davidkhala/4aa1d6b4444f28769999aeac028786663333c7a
与AndroidKeystore生成键对时,它已经自动存储。您可以在需要使用您指定的别名(示例中的"别名")时检索它。
请注意,当您获得私人关键时,您实际上不会获得私钥秘密。这些人留在安全的硬件中,永远不会离开,因此不会泄漏。但是您会得到一个私人关键对象,就像有秘密一样,您可以使用它。您的加密或符号请求发送到安全硬件,该硬件使用秘密执行操作并将结果交给您。