从AndroidKeyStore中提取后,无法使用PrivateKey

时间:2017-06-22 05:42:47

标签: android encryption rsa private-key android-keystore

当我们生成密钥对并在密码中使用密钥时,它按预期工作,没有任何例外:

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类。

0 个答案:

没有答案