Current location - Quotes Website - Signature design - 求ECDSA的Java 语言(一种计算机语言,尤用于创建网站)代码
求ECDSA的Java 语言(一种计算机语言,尤用于创建网站)代码

方案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的签名,验签,加密