当我们生成密钥对并在密码中使用密钥时,它按预期工作,没有任何例外:
KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA", "BC");
kpg.initialize(1024, new SecureRandom());
KeyPair kp = kpg.generateKeyPair();
PrivateKey privateKey = kp.getPrivate();
byte[] encryptedBytes = "SAMPLE".getBytes();
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] decryptedBytes = cipher.doFinal(encryptedBytes);
但是在将生成的PrivateKey保存到AndroidKeyStore并从中提取之后:
KeyStore ks = KeyStore.getInstance("AndroidKeyStore");
ks.load(null);
KeyStore.Entry entry = ks.getEntry("alias", null);
PrivateKey privateKey = ((KeyStore.PrivateKeyEntry) entry).getPrivateKey();
privateKey不为null,但上面第一个块中的相同代码(用于解密)会抛出一个异常,并在行上发送消息“未知密钥类型传递给RSA”:
cipher.init(Cipher.DECRYPT_MODE, privateKey);
我知道AndroidKeyStore不是要提取有关其中保存的密钥的数据,但我希望它能够返回正确的私钥,以便至少正确使用Android的Cipher类。