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

Yag*_*giz 8 java cryptography bouncycastle

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

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();
}
Run Code Online (Sandbox Code Playgroud)

gtr*_*rig 15

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

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

并验证:

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

  • “ BC”是BouncyCastle,“ SC”是SpongyCastle,这是两个不同的提供程序。问题是关于BouncyCastle,这意味着“ BC”是正确的,但“ SC”不是 (2认同)

Tho*_*nin 7

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