如何通过公钥从KeyStore中包装密钥?

时间:2017-11-13 21:01:15

标签: java android encryption

我对Android编程感兴趣。我正在使用对称和非对称加密,我想通过公钥从Android密钥库中包装密钥,但我失败了。我可以从Key Store获取密钥,但我无法将其包装好。

 Cipher cipher = Cipher.getInstance("RSA");
 cipher.init(Cipher.WRAP_MODE, publicKey);
 SecretKey secret = (SecretKey) keyStore.getKey("key",null);
 byte[] encrypted = cipher.wrap(secret);

错误:

  

InvalidKeyException:无法换行键,空编码

我尝试在上面的代码中使用这个密钥对和密钥 - 我通过对称和非对称加密成功加密和解密了一些String。

有趣的是什么?我试图通过KeyGenerator生成新的密钥,并且包装成功。我有点困惑。我无法通过从KeyStore加载的密钥包装它。

你能帮我吗?

1 个答案:

答案 0 :(得分:0)

我相信您在使用BouncyCastle时遇到了此错误,因为我也刚收到此错误。

我发现BouncyCastle正在调用以下引发错误的代码:

byte[] encoded = key.getEncoded();
if (encoded == null) {
    throw new InvalidKeyException("Cannot wrap key, null encoding.");
}

Android KeyStore不允许您访问私钥的值,而是在尝试访问私钥时返回null,这就是抛出上述错误的原因。