数字签名算法ECDSA

来源:互联网 发布:红梅白雪知歌词 编辑:程序博客网 时间:2024/05/17 02:47
一 介绍
ECDSA:Elliptic Curv Digstal Signature Algorithm 椭圆曲线数字签名算法。
速度快、强度高、签名短

二 参数说明

三 代码实现
package com.imooc.security.ecdsa;import java.security.KeyFactory;import java.security.KeyPair;import java.security.KeyPairGenerator;import java.security.NoSuchAlgorithmException;import java.security.PrivateKey;import java.security.PublicKey;import java.security.Signature;import java.security.interfaces.ECPrivateKey;import java.security.interfaces.ECPublicKey;import java.security.spec.PKCS8EncodedKeySpec;import java.security.spec.X509EncodedKeySpec;import org.apache.commons.codec.binary.Hex;public class ImoocECDSA {private static String src = "cakin security ecdsa";public static void main(String[] args) {jdkECDSA();}public static void jdkECDSA() {try {//1.初始化密钥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[] result = signature.sign();System.out.println("jdk ecdsa sign : " + Hex.encodeHexString(result));//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(result);System.out.println("jdk ecdsa verify : " + bool);} catch (Exception e) {e.printStackTrace();}}}


四 实现效果
jdk ecdsa sign : 3044021f6662929ed21c7deb2d160be1956a0b916264cbe687210b923b17c4aff8414d022100ced1d6ff766e7ead8b307b13d53d1bb49fc51b232646f4ed3d37a296e8a5f5bc
jdk ecdsa verify : true

五 应用场景


原创粉丝点击