zoukankan      html  css  js  c++  java
  • Java数字签名——DSA算法

      RSA数字加密算法参考:http://www.cnblogs.com/LexMoon/p/javaRSA.html

      DSS: 数字签名标准

      DSA: 数字签名算法

      DSA仅仅包含数字签名  

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

      密钥长度均为512~1024(64的整数倍),默认长度为1024

         实现方JDK:

            SHA1withDSA

         实现方BD:

            SHA224withDSA

            SHA256withDSA

            SHA384withDSA

            SHA512withDSA

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

     1 package DSA;
     2 
     3 import com.sun.org.apache.xerces.internal.impl.dv.util.HexBin;
     4 
     5 import java.security.*;
     6 import java.security.interfaces.DSAPrivateKey;
     7 import java.security.interfaces.DSAPublicKey;
     8 import java.security.spec.PKCS8EncodedKeySpec;
     9 import java.security.spec.X509EncodedKeySpec;
    10 
    11 public class Dsa {
    12     public static String src = "hello berber" ;
    13     public static void main(String[] args) {
    14             jdkDSA();
    15     }
    16     public static void jdkDSA(){
    17         try{
    18             // 初始化:
    19             KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("DSA") ;
    20             keyPairGenerator.initialize(512);
    21             KeyPair keyPair = keyPairGenerator.generateKeyPair();
    22 
    23             DSAPublicKey dsaPublicKey = (DSAPublicKey)keyPair.getPublic() ;
    24             DSAPrivateKey dsaPrivateKey = (DSAPrivateKey)keyPair.getPrivate() ;
    25             // 签名:
    26             PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(dsaPrivateKey.getEncoded());
    27             KeyFactory keyFactory = KeyFactory.getInstance("DSA");
    28             PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);
    29             Signature signature = Signature.getInstance("SHA1withDSA");
    30             signature.initSign(privateKey);
    31             signature.update(src.getBytes());
    32             byte arr[] = signature.sign() ;
    33             System.out.println("jdk dsa sign:"+ HexBin.encode(arr));
    34             // 验证签名
    35             X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(dsaPublicKey.getEncoded()) ;
    36             keyFactory = KeyFactory.getInstance("DSA");
    37             PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec) ;
    38             signature = Signature.getInstance("SHA1withDSA");
    39             signature.initVerify(publicKey);
    40             signature.update(src.getBytes());
    41             boolean bool = signature.verify(arr) ;
    42             System.out.println("jdk dsa verify:"+bool);
    43         }catch (Exception e){
    44 
    45         }
    46     }
    47 }

      结果:

        

      过程:

         构建密钥对:

            发送方:  1.构建密钥对

                  2.公布密钥

         发送数据 :

            发送方:  1.使用私钥对数据签名

                  2.发送签名,数据

                     3.使用公钥,签名验证数据

  • 相关阅读:
    Leetcode 5
    DFS输出全排列
    Leetcode 461
    Leetcode 4
    Leetcode 3
    Leetcode 2
    Windows 10 Mac 为Vs Code配置C/C++环境
    机器学习 学习笔记(1) -- 初识机器学习
    MacBook Pro休眠掉电、耗电量大问题解决方案
    Oracle错误及解决方案
  • 原文地址:https://www.cnblogs.com/LexMoon/p/javaDSA.html
Copyright © 2011-2022 走看看