加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – BouncyCastle错误:无法识别基于ECDSA的签名者中的密钥

发布时间:2020-12-15 08:40:17 所属栏目:Java 来源:网络整理
导读:我一直在使用BouncyCastle的加密库和RSA的加密库进行一些简单的测试.我正在做的是生成私有/公钥对,如下所示: KeyPairGenerator kpg = KeyPairGenerator.getInstance("EC","JsafeJCE");kpg.initialize(new ECGenParameterSpec("secp384r1"));KeyPair kp = kp
我一直在使用BouncyCastle的加密库和RSA的加密库进行一些简单的测试.我正在做的是生成私有/公钥对,如下所示:

KeyPairGenerator kpg = KeyPairGenerator.getInstance("EC","JsafeJCE");
kpg.initialize(new ECGenParameterSpec("secp384r1"));
KeyPair kp = kpg.genKeyPair();
PrivateKey priv = kp.getPrivate();
PublicKey pub = kp.getPublic();

然后我生成这样的签名

Signature sig = Signature.getInstance("SHA384/ECDSA","BC");

我尝试签署私钥:

sig.initSign(priv);

所有这一切都让我错误:

java.security.InvalidKeyException:无法识别基于ECDSA的签名者中的密钥类型

当我BC和JsafeJCE时,我没有得到任何错误,一切都很好.如果两个提供者都是卑诗省也可以.那么为什么我不能用BC lib签署JsafeJCE生成的密钥呢?

解决方法

我按照以下步骤解决了同样的问题:

1)创建静态提供者:

private static BouncyCastleProvider bouncyCastleProvider;
public static final BouncyCastleProvider BOUNCY_CASTLE_PROVIDER = new BouncyCastleProvider();
static {
    bouncyCastleProvider = BOUNCY_CASTLE_PROVIDER;
}

2)生成keyPair:

KeyPairGenerator g = KeyPairGenerator.getInstance("ECDSA",bouncyCastleProvider);
g.initialize(ecSpec,random);
KeyPair keyPair = g.generateKeyPair();

3)如果你想用钥匙签名:

Signature signature = Signature.getInstance("SHA256withECDSA",bouncyCastleProvider);
signature.initSign(privateKey);
signature.update(signedData);
signature.sign();

它对我有用,也希望对你有用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读