这是基于您的示例的小示例。
注意: 这是此答案的原始代码,请参阅下一个代码片段以获取更新的版本。
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 { 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(); Signature dsa = Signature.getInstance("SHA1withECDSA"); dsa.initSign(priv); String str = "This is string to sign"; byte[] strByte = str.getBytes("UTF-8"); dsa.update(strByte); byte[] realSig = dsa.sign(); System.out.println("Signature: " + new BigInteger(1, realSig).toString(16)); }}更新:这是删除过时算法的稍微改进的示例。它还使用RFC
8422中指定的SECG标记“ secp256r1”明确请求NIST
P-256曲线。
import javax.xml.bind.DatatypeConverter;import java.security.*;import java.security.spec.ECGenParameterSpec;public class ECDSAExample { public static void main(String[] args) throws Exception { KeyPairGenerator keyGen = KeyPairGenerator.getInstance("EC"); keyGen.initialize(new ECGenParameterSpec("secp256r1"), new SecureRandom()); KeyPair pair = keyGen.generateKeyPair(); PrivateKey priv = pair.getPrivate(); PublicKey pub = pair.getPublic(); Signature ecdsa = Signature.getInstance("SHA256withECDSA"); ecdsa.initSign(priv); String str = "This is string to sign"; byte[] strByte = str.getBytes("UTF-8"); ecdsa.update(strByte); byte[] realSig = ecdsa.sign(); System.out.println("Signature: " + new BigInteger(1, realSig).toString(16)); }}


