• Java数字签名——ECDSA算法


      ECDSA

      例如微软产品的序列号的验证算法。

      Elliptic Curve Digital Signature Algorithm,椭圆曲线数字签名算法。

      速度快,强度高,签名短

    ——————————————————————————————————

      密钥长度   112~571           默认  256  

    ——————————————————————————————————
      NONEwithECDSA     签名长度:128  实现方:JDK/BC
      RIPEMD160withECDSA   签名长度:160  实现方:BC
      SHA1withECDSA        签名长度:160  实现方:JDK/BC
      SHA224withECDSA    签名长度:224  实现方:BC
      SHA384withECDSA    签名长度:384  实现方:JDK/BC
      SHA512withECDSA    签名长度:512  实现方:JDK/BC 

    ——————————————————————————————————

      代码:

     1 package ECDSA;
     2 
     3 import com.sun.org.apache.xerces.internal.impl.dv.util.HexBin;
     4 
     5 import java.security.*;
     6 import java.security.interfaces.ECPrivateKey;
     7 import java.security.interfaces.ECPublicKey;
     8 import java.security.spec.PKCS8EncodedKeySpec;
     9 import java.security.spec.X509EncodedKeySpec;
    10 
    11 public class Ecdsa {
    12     private static String src = "hello berber" ;
    13     public static void main(String []args){
    14         jdkECDSA();
    15     }
    16     public static void jdkECDSA(){
    17         // 1.初始化密钥
    18         try{
    19             KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("EC");
    20             keyPairGenerator.initialize(256);
    21             KeyPair keyPair = keyPairGenerator.generateKeyPair() ;
    22             ECPublicKey ecPublicKey = (ECPublicKey)keyPair.getPublic() ;
    23             ECPrivateKey ecPrivateKey = (ECPrivateKey)keyPair.getPrivate() ;
    24             // 执行签名
    25             PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(ecPrivateKey.getEncoded());
    26             KeyFactory keyFactory = KeyFactory.getInstance("EC") ;
    27             PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec) ;
    28             Signature signature = Signature.getInstance("SHA1withECDSA");
    29             signature.initSign(privateKey);
    30             signature.update(src.getBytes());
    31             byte []arr = signature.sign();
    32             System.out.println("jdk ecdsa sign :"+ HexBin.encode(arr));
    33             // 验证签名
    34             X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(ecPublicKey.getEncoded());
    35             keyFactory = KeyFactory.getInstance("EC");
    36             PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);
    37             signature = Signature.getInstance("SHA1withECDSA");
    38             signature.initVerify(publicKey);
    39             signature.update(src.getBytes());
    40             boolean bool = signature.verify(arr);
    41             System.out.println("jdk ecdsa verify:"+bool);
    42         }catch(Exception e){
    43 
    44         }
    45     }
    46 }
  • 相关阅读:
    全球各国各类在轨与退役卫星数量与详细参数信息数据下载网站整理[转]
    土地覆盖土壤类型水体流域数据下载网站整理【转】
    Prometheus Operator配置钉钉告警
    Prometheus Operator自动发现功能修改 prometheus.yml文件
    prometheus operator 监控mysqlexporter
    prometheus operator 监控redisexporter
    Prometheus Operator 安装配置|最新版
    Linux 命令之 lsof 列出当前系统已打开的文件列表
    linux内核编译过程的最终总结版
    Linux内核裁剪的具体步骤
  • 原文地址:https://www.cnblogs.com/LexMoon/p/javaECDSA.html
Copyright © 2020-2023  润新知