Base64编码的EC私钥字符串到PrivateKey

时间:2019-02-15 15:28:38

标签: android

我正在尝试将我的私钥字符串转换为我的Android应用程序中的PrivateKey对象。我已经在StackOverflow上阅读了很多有关该主题的文章,但是我可以解决我的问题。

我正在使用以下函数来转换我的密钥:

String privateKey = "MIGkAgEBBDCAHpFQ62QnGCEvYh/pE9QmR1C9aLcDItRbslbmhen/h1tt8AyMhskeenT+rAyyPhGgBwYFK4EEACKhZANiAAQLW5ZJePZzMIPAxMtZXkEWbDF0zo9f2n4+T1h/2sh/fviblc/VTyrv10GEtIi5qiOy85Pf1RRw8lE5IPUWpgu553SteKigiKLUPeNpbqmYZUkWGh3MLfVzLmx85ii2vMU=";

@Nullable
private static PrivateKey getKey(String key) {
    try {
        byte[] byteKey = Base64.decode(key.getBytes(), Base64.DEFAULT);
        KeyFactory keyFactory = KeyFactory.getInstance("EC");
        return keyFactory.generatePrivate(new PKCS8EncodedKeySpec(byteKey));
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

根据ASN.1 JavaScript decoder,我确实有一个有效的私钥。

尽管如此,getKey()始终会失败,但出现以下异常:

  

java.security.spec.InvalidKeySpecException:java.lang.RuntimeException:错误:0c0000be:ASN.1编码例程:OPENSSL_internal:WRONG_TAG

我无法理解此错误消息。即使经过大量的谷歌搜索。有人知道我在做什么错吗?我使用了错误的密钥规格吗(尽管此处的许多答案都建议使用PKCS8EncodedKeySpec()

您在上面的代码中看到的私钥是由jwt.io使用ES384算法生成的。

0 个答案:

没有答案