我在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());
这是对的吗?或者这可能导致另一个例外?
答案 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));
}