如何使用Bouncy Castle中Android密钥库中的私钥



我使用Bouncy Castle来生成和使用PKCS#7/CMSEnvelopedDataSignedData值。在签名或解密时,如何让BC使用Android密钥库系统中的私钥?注意,我无法检索私钥,因为这是密钥库系统的全部功能。

例如,当我解密KeyTransRecipientInfo收件人的EnvelopedData值时,我必须将私钥传递给org.bouncycastle.cms.jcajce.JceKeyTransEnvelopedRecipient。当我必须对SignedData值进行签名时,我必须将私钥传递给org.bouncycastle.operator.jcajce.JcaContentSignerBuilder.build()。当私钥从未离开安卓密钥库时,我该怎么做?

我很想说这是不可能的,因为我还没有发现任何迹象表明这是可能的。这就是我在这里检查的原因。

如果相关,则EnvelopedData值将具有KeyTransRecipientInfoKeyAgreeRecipientInfo收件人。

我想如果不能做到这一点,第二个最好的方法是创建一个主(对称(密钥来保持非对称密钥的加密

我刚刚看了一下您提供的代码。我认为问题在于您没有加载密钥条目,而是试图直接操作PrivateKey对象。

标准方法是:

  1. 加载密钥库
KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
  1. 从密钥库获取私钥条目:
ProtectionParameter params = null; //some protection parameters...
KeyStore.PrivateKeyEntry privateKeyEntry = (KeyStore.PrivateKeyEntry) keyStore.getEntry("alias", params);

最新更新