当Androidkeystore将私人和公共钥匙存储在AndroidKeystore中时



哪种方法将私有和公共密钥存储在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生成键对时,它已经自动存储。您可以在需要使用您指定的别名(示例中的"别名")时检索它。

请注意,当您获得私人关键时,您实际上不会获得私钥秘密。这些人留在安全的硬件中,永远不会离开,因此不会泄漏。但是您会得到一个私人关键对象,就像有秘密一样,您可以使用它。您的加密或符号请求发送到安全硬件,该硬件使用秘密执行操作并将结果交给您。

最新更新