在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")
。
- 与充气城堡签订的X509证书无效
- java.lang.IllegalArgumentException:string curve25519 not a OID bouncycastle 1.52
- 为什么在用充气城堡解密后附加这些方形符号?
- Java BouncyCastle ECC密钥和自签名证书
- RSA和PublicKey与dotnet互操作
- 使用Java和Bouncycastle进行X.509证书validation
- java.security.NoSuchProviderException:没有这样的提供者:BC
- 如何将PEM编码的椭圆曲线公钥加载到Bouncy Castle?
- Java BC SicBlockCipher直接输出等效于c#