数字签名算法ECDSA

来源:互联网 发布:对工作表示满意的数据 编辑:程序博客网 时间:2024/05/16 15:20
import org.apache.commons.codec.binary.Hex;import org.bouncycastle.asn1.eac.ECDSAPublicKey;import java.security.*;import java.security.interfaces.DSAPrivateKey;import java.security.interfaces.DSAPublicKey;import java.security.interfaces.ECPrivateKey;import java.security.interfaces.ECPublicKey;import java.security.spec.PKCS8EncodedKeySpec;import java.security.spec.X509EncodedKeySpec;/** * Created by pengchao on 2017/10/19. */public class ImoocECDSA {    private static String src ="imooc security ecdsa";    public static void  main(String[] args) {        jdkDSA();    }    public static void  jdkDSA(){        try {            //初始化密钥            KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("EC");            keyPairGenerator.initialize(256);            KeyPair keyPair = keyPairGenerator.generateKeyPair();            ECPublicKey ecPublicKey = (ECPublicKey) keyPair.getPublic();            ECPrivateKey ecPrivateKey = (ECPrivateKey) keyPair.getPrivate();            //2.执行签名            PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(ecPrivateKey.getEncoded());            KeyFactory keyFactory = KeyFactory.getInstance("EC");            PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);            Signature signature = Signature.getInstance("SHA1withECDSA");            signature.initSign(privateKey);            signature.update(src.getBytes());            byte[] bytes = signature.sign();            System.out.println("jdk ecdsa sign:" + Hex.encodeHexString(bytes));            //3.验证签名            X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(ecPublicKey.getEncoded());            keyFactory = KeyFactory.getInstance("EC");            PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);            signature = Signature.getInstance("SHA1withECDSA");            signature.initVerify(publicKey);            signature.update(src.getBytes());            boolean bool = signature.verify(bytes);            System.out.println("jdk ecdsa verify :" + bool);        } catch (Exception e) {            e.printStackTrace();        }    }}