在BouncyCastle上使用数字签名算法(ECDSA)实现的椭圆曲线

我正在尝试实现ECDSA(椭圆曲线数字签名算法),但我在Java中找不到任何使用Bouncy Castle的例子。 我创建了密钥,但我真的不知道我应该使用什么样的函数来创建签名并validation它。

public static KeyPair GenerateKeys() throws NoSuchAlgorithmException, NoSuchProviderException, InvalidAlgorithmParameterException { ECParameterSpec ecSpec = ECNamedCurveTable.getParameterSpec("B-571"); KeyPairGenerator g = KeyPairGenerator.getInstance("ECDSA", "BC"); g.initialize(ecSpec, new SecureRandom()); return g.generateKeyPair(); } 

owlstead是对的。 再详细说明一下,你可以这样做:

 KeyPair pair = GenerateKeys(); Signature ecdsaSign = Signature.getInstance("SHA256withECDSA", "BC"); ecdsaSign.initSign(pair.getPrivate()); ecdsaSign.update(plaintext.getBytes("UTF-8")); byte[] signature = ecdsaSign.sign(); 

并validation:

 Signature ecdsaVerify = Signature.getInstance("SHA256withECDSA", "BC"); ecdsaVerify.initVerify(pair.getPublic()); ecdsaVerify.update(plaintext.getBytes("UTF-8")); boolean result = ecdsaVerify.verify(signature); 

BouncyCastle是一个提供者 :一组类,它提供了应用程序应该通过Java附带的通用API使用的一些加密function。 请参阅Java Cryptography Architecture ,特别是有关签名的部分,以了解如何生成或validation签名。 基本上,您获得了一个java.security.Signature实例(使用静态getInstance()方法),然后使用私钥( initSign()生成签名)或公钥( initVerify()来初始化它validation签名)。 然后,您使用一个或多个update()调用输入消息数据,最后调用sign()verify() ,以生成或validation签名。

您似乎主要使用Bouncy Castle作为提供者。 在这种情况下,您可以简单地使用Signature.getInstance("SHA256withECDSA", "BC")