从base64字符串ECDSA私钥

时间:2017-03-05 12:50:54

标签: android ecdsa spongycastle

我在base64中有ECDSA私钥字符串(我使用此https://stackoverflow.com/a/8571649/7661555答案中的regexp检查此字符串)。

我尝试从此字符串生成PrivateKey实例。 我在我的项目中包含了SpongyCastle,并尝试使用以下代码生成它:

        PKCS8EncodedKeySpec privKeySpec = new PKCS8EncodedKeySpec(encKey);

        KeyFactory keyFactory = KeyFactory.getInstance("ECDSA", "SC");

        PrivateKey priv = keyFactory.generatePrivate(privKeySpec);

但是当我运行此代码时,我会得到下一个异常:

W / System.err:java.security.spec.InvalidKeySpecException:无法识别编码的密钥规范

你能告诉我我做错了吗?

P.S。 在生成PrivateKey之后,我希望用它来标记另一个字符串。 为此,我找到下一个代码:

        Signature sig = Signature.getInstance("SHA256withECDSA");
        sig.initSign(priv);
        sig.update(token.getBytes());

这是对的吗?或者这可能导致另一个例外?

1 个答案:

答案 0 :(得分:0)

您在问题中提到的正则表达式,只检查字符串是否为base64编码。

您能分享一下,如何从EC私钥生成base64字符串?

    private String getBase64Value(PrivateKey privateKey) {
    return Base64.encodeToString(privateKey.getEncoded(), Base64.NO_WRAP);
}

private PrivateKey reconstructPrivateKey(String base64Value) throws InvalidKeySpecException, NoSuchAlgorithmException {
    KeyFactory kf = KeyFactory.getInstance("EC");
    byte[] bytes = Base64.decode(base64Value, Base64.NO_WRAP);
    return kf.generatePrivate(new PKCS8EncodedKeySpec(bytes));
}