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(); 它对我有用,也希望对你有用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |