gpt4 book ai didi

java - ECDSA算法教程来签署一个字符串

转载 作者:太空狗 更新时间:2023-10-29 22:54:21 30 4
gpt4 key购买 nike

你能帮我找到一个关于如何在 java 中使用 ECDSA 算法对字符串进行签名的简单教程吗?但不使用任何第三方库,如 bouncycaSTLe。只是 JDK 7。我发现很难搜索一个简单的例子,我是密码学的新手。


import java.io.*;
import java.security.*;

public class GenSig {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
/*
* Generate a DSA signature
*/

try {

/*
* Generate a key pair
*/

KeyPairGenerator keyGen = KeyPairGenerator.getInstance("DSA", "SUN");
SecureRandom random = SecureRandom.getInstance("SHA1PRNG", "SUN");

keyGen.initialize(1024, random);

KeyPair pair = keyGen.generateKeyPair();
PrivateKey priv = pair.getPrivate();
PublicKey pub = pair.getPublic();

/*
* Create a Signature object and initialize it with the private key
*/

Signature dsa = Signature.getInstance("SHA1withDSA", "SUN");

dsa.initSign(priv);

String str = "This is string to sign";
byte[] strByte = str.getBytes();
dsa.update(strByte);

/*
* Now that all the data to be signed has been read in, generate a
* signature for it
*/

byte[] realSig = dsa.sign();
System.out.println("Signature: " + new String(realSig));


} catch (Exception e) {
System.err.println("Caught exception " + e.toString());
}
}
}

ECDSA如何修改?

最佳答案

这是基于您的示例的小示例。

注意:这是此答案的原始代码,请参阅下一个代码片段以获取更新版本。

import java.math.BigInteger;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.SecureRandom;
import java.security.Signature;

public class ECDSAExample {

public static void main(String[] args) throws Exception {
/*
* Generate an ECDSA signature
*/

/*
* Generate a key pair
*/

KeyPairGenerator keyGen = KeyPairGenerator.getInstance("EC");
SecureRandom random = SecureRandom.getInstance("SHA1PRNG");

keyGen.initialize(256, random);

KeyPair pair = keyGen.generateKeyPair();
PrivateKey priv = pair.getPrivate();
PublicKey pub = pair.getPublic();

/*
* Create a Signature object and initialize it with the private key
*/

Signature dsa = Signature.getInstance("SHA1withECDSA");

dsa.initSign(priv);

String str = "This is string to sign";
byte[] strByte = str.getBytes("UTF-8");
dsa.update(strByte);

/*
* Now that all the data to be signed has been read in, generate a
* signature for it
*/

byte[] realSig = dsa.sign();
System.out.println("Signature: " + new BigInteger(1, realSig).toString(16));

}
}

更新:这里是略微改进的示例,删除了已弃用的算法。它还明确请求使用 SECG 符号“secp256r1”的 NIST P-256 曲线,如 RFC 8422. 中指定的那样

import java.math.BigInteger;
import java.security.*;
import java.security.spec.ECGenParameterSpec;

public class ECDSAExample {

/**
* @param args the command line arguments
*/
public static void main(String[] args) throws Exception {
/*
* Generate an ECDSA signature
*/

/*
* Generate a key pair
*/

KeyPairGenerator keyGen = KeyPairGenerator.getInstance("EC");

keyGen.initialize(new ECGenParameterSpec("secp256r1"), new SecureRandom());

KeyPair pair = keyGen.generateKeyPair();
PrivateKey priv = pair.getPrivate();
PublicKey pub = pair.getPublic();

/*
* Create a Signature object and initialize it with the private key
*/

Signature ecdsa = Signature.getInstance("SHA256withECDSA");

ecdsa.initSign(priv);

String str = "This is string to sign";
byte[] strByte = str.getBytes("UTF-8");
ecdsa.update(strByte);

/*
* Now that all the data to be signed has been read in, generate a
* signature for it
*/

byte[] realSig = ecdsa.sign();
System.out.println("Signature: " + new BigInteger(1, realSig).toString(16));

}
}

关于java - ECDSA算法教程来签署一个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11339788/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com