我正在尝试将我的私钥字符串转换为我的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算法生成的。