方案1
包ECDSA
导入com . sun . org . Apache . Xerces . internal . impl . dv . util . hex bin;
导入Java . security . *;
导入Java . security . interfaces . ecprivatekey;
导入Java . security . interfaces . ecpublickey;
导入Java . security . spec . pkcs 8 encodedkeyspec;
导入Java . security . spec . x 59 encodedkeyspec;
公共类Ecdsa {
私有静态字符串src = " hello berberpublic static void main(String[]args){
jdkECDSA();公共静态void jdkECDSA(){
// 1。初始化密钥请尝试{
KeyPairGenerator KeyPairGenerator = KeyPairGenerator . getinstance(" EC ");
key pair generator . initialize(256);key pair key pair = key pair generator . generatekeypair();
ECPublicKey ECPublicKey =(ECPublicKey)key pair . get public();
ECPrivateKey ECPrivateKey =(ECPrivateKey)key pair . get private();
//执行签名
pkcs 8 encodedkeyspec pkcs 8 encodedkeyspec = new pkcs 8 encodedkeyspec(ecprivatekey . get encoded());
key factory key factory = key factory . getinstance(" EC ");
private key private key = key factory . generate private(pkcs 8 encodedkeyspec);
Signature Signature = Signature . getinstance(" sha1 withecdsa ");
signature . init sign(private key);
signature . update(src . getbytes());byte[]arr = signature . sign();
system . out . println(" JDK ECD sa sign:"+hex bin . encode(arr));
//验证签名
x 59 encodedkeyspec x 59 encodedkeyspec = new x 59 encodedkeyspec(ecpublickey . get encoded());
key factory = key factory . getinstance(" EC ");
public key public key = key factory . generate public(x 59 encodedkeyspec);
signature = signature . getinstance(" sha 1 withecdsa ");
signature . init verify(public key);
signature . update(src . getbytes());boolean bool = signature . verify(arr);
system . out . println(" JDK ECD sa verify:"+bool);}catch(异常e){
}
}
}
Java数字签名——ECDSA算法
方案2公共类MyTest {
/* *
* @ param args
*/
公共静态void main(String[]args){
new MyTest()。getSign();
}
void getSign() {
//使用“EC”算法获取密钥生成器的实例
try {
Key pair Generator g = Key pair Generator . getinstance(" EC ");
ECGenParameterSpec kpg params = new ECGenParameterSpec(" secp 256 r 1 ");g . initialize(kpg params);
key pair pair = g . generatekeypair();
//具有SHA256withECDSA算法的signature类的实例
Signature ecds assign = Signature . getinstance(" sha 256 withecdsa ");
ecds assign . init sign(pair . get private());
System.out.println("私钥是::"+pair . get Private());
System.out.println("公钥是::"+pair . get Public());
String msg = " text ECD sa with sha 256 ";//getsha 256(msg)
ecds assign . update((msg+pair . get private()。toString())
。getBytes(" UTF-8 "));
byte[]signature = ecds assign . sign();
System.out.println("签名为::"
+ new BigInteger(1,签名)。toString(16));
//Validation
ecds assign . init verify(pair . get public());
ecdsaSign.update(签名);
if(ecds assign . verify(signature))
system . out . println(" valid ");else
System.out.println("无效!!!!");} catch(Exception e){
//TODO:handle Exception e . printstacktrace();Java–使用secp256r1曲线和SHA256算法生
怎么验证生成的Ecdsa签名是正确的呢,可以看下这篇文章:RSA、ECC、Ecdsa、国密SM2的签名,验签,加密