Android的KeyStore getKey返回null

时间:2014-12-20 17:58:34

标签: java android encryption rsa

我使用这个小片段在Android的密钥库中存储KeyPair:

KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
ks.load(null);
Certificate[] cert = new Certificate[1];
cert[0] = getCertificate(kp);
ks.setKeyEntry(PRIVATE_KEY_TAG, kp.getPrivate(), null, cert);
ks.setKeyEntry(PUBLIC_KEY_TAG, kp.getPublic(), null, cert);

但是当我从KeyStore获取密钥时,ks.getKey(PUBLIC_KEY_TAG, null).getEncoded(),我得到了这个例外:

Attempt to invoke interface method Key.getEncoded() on a null object

当我尝试通过密码加密字符串时,我得到一个:

Unknow key type passed to RSA

有关此KeyStore导致问题的原因的任何想法? 谢谢。

1 个答案:

答案 0 :(得分:2)

你可以retrieve the public key from the certificate instead。密钥库可用于存储您自己拥有的私钥/证书,或者是另一个实体的可信证书。 Java(和Android)密钥库主要针对基于X5.09的PKI。使用证书存储公钥没有意义,公钥已经包含在证书中。

所以请尝试:

ks.getCertificate(PRIVATE_KEY_TAG).getPublicKey().getEncoded();