当前位置: 首页 > 知识库问答 >
问题:

如何用公钥包装KeyStore中的密钥?

曹和正
2023-03-14

我对Android编程感兴趣。我正在使用对称和非对称加密,我想用公钥包装Android Key Store中的密钥,但失败了。我可以从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:无法包装键,空编码

我尝试在上面的代码中使用这个密钥对和秘密密钥——我通过对称和非对称加密成功地加密和解密了一些字符串。

有趣的是什么?我试图通过KeyGenerator生成新的密钥,包装成功了。我有点困惑。我不能用从KeyStore加载的密钥包装它。

你能帮我吗?

共有1个答案

羊禄
2023-03-14

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

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

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

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

 类似资料:
  • 有没有人可以粘贴一些用于存储私钥和公钥的示例代码。 非常感谢!

  • 是的。这是这个问题的重复。然而,答案是错误的和误导性的。答案建议将密钥写入一个其他应用程序可以访问该文件的文件。如果我没看错的话,keystore的目的是生成并存储只能被你的app看到的私钥,所以我甚至不确定为什么答案在那个问题中被接受了。 另一个问题是关于加密和解密的,但并不是真正关于将数据保存到密钥存储区的问题。 好的,所以我发现一旦您调用就可以自动生成密钥,就像这个应用程序中演示的那样。但我

  • 在SSO的实现中,我使用了bouncycastle(JAVA)进行签名、加密、解密和签名的验证。我有原始PGP公钥和私钥,我需要将它们存储在Java Keystore中。这些PGP公钥没有证书。 我知道对于公钥(根据Keystore的javadoc:http://docs.oracle.com/javase/6/docs/api/java/security/keystore.html),我必须创建

  • 问题内容: 我正在使用KeyStore保护我的私钥,但是在以下行中: 被执行,我有这个异常: 我不明白问题出在哪里。 码: 谢谢您的帮助! 问题答案: 更改: 至 现在,您正在将方法中的context参数分配为与全局值相同的值,该值为null。因此,您的上下文实际上没有被存储。

  • 我找到了几个可以使用的解决方案。Net RSA Provider使用公钥对消息进行加密,并使用私钥对其解密。 但我想要的是用私钥加密,用公钥解密。 我希望在我的应用程序中存储公钥,并使用私钥加密许可证,例如在我的开发人员计算机上,将其发送到应用程序,并让信息使用公钥解密。 我怎样才能做到这一点?

  • 我是Android安全方面的新手。我已经使用Androidkeystore保存应用程序机密。为了从Android keystore中获得保存的密钥,我需要在每次别名密钥中传递我在加密时传递过的内容。所以,我的问题是,我还想安全地保存别名密钥。因此,没有一个键通过查看代码看到别名键。请帮帮我。