【问题标题】:How to wrap secret key from KeyStore by public key?如何通过公钥包装来自 KeyStore 的密钥?
【发布时间】:2018-04-26 16:11:19
【问题描述】:

我对 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 加载的密钥来包装它。

你能帮帮我吗?

【问题讨论】:

  • “我无法包装它”的描述性不够。你有错误吗?
  • 是的,InvalidKeyException:Cannot wrap key,null encoding

标签: java android encryption


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-26
    • 1970-01-01
    • 2019-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-18
    相关资源
    最近更新 更多