我使用这个小片段在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导致问题的原因的任何想法? 谢谢。
答案 0 :(得分:2)
你可以retrieve the public key from the certificate instead。密钥库可用于存储您自己拥有的私钥/证书,或者是另一个实体的可信证书。 Java(和Android)密钥库主要针对基于X5.09的PKI。使用证书存储公钥没有意义,公钥已经包含在证书中。
所以请尝试:
ks.getCertificate(PRIVATE_KEY_TAG).getPublicKey().getEncoded();