首页 > 编程 > Java > 正文

Java数字签名算法DSA实例详解

2019-11-26 10:00:07
字体:
来源:转载
供稿:网友

本文实例讲述了Java数字签名算法DSA。分享给大家供大家参考,具体如下:

一、介绍

DSS:Digital Signature Standard 数字签名标准

DSA:Digital Signature Algorithm 数字签名算法

DSA仅包含数字签名

二、参数说明

三、代码实现

package com.imooc.security.dsa;import java.security.KeyFactory;import java.security.KeyPair;import java.security.KeyPairGenerator;import java.security.PrivateKey;import java.security.PublicKey;import java.security.Signature;import java.security.interfaces.DSAPrivateKey;import java.security.interfaces.DSAPublicKey;import java.security.spec.PKCS8EncodedKeySpec;import java.security.spec.X509EncodedKeySpec;import org.apache.commons.codec.binary.Hex;public class ImoocDSA {  private static String src = "cakin24 security dsa";  public static void main(String[] args) {    jdkDSA();  }  public static void jdkDSA() {    try {      //1.初始化密钥      KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("DSA");      keyPairGenerator.initialize(512);      KeyPair keyPair = keyPairGenerator.generateKeyPair();      DSAPublicKey dsaPublicKey = (DSAPublicKey) keyPair.getPublic();      DSAPrivateKey dsaPrivateKey = (DSAPrivateKey)keyPair.getPrivate();      //2.执行签名      PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(dsaPrivateKey.getEncoded());      KeyFactory keyFactory = KeyFactory.getInstance("DSA");      PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);      Signature signature = Signature.getInstance("SHA1withDSA");      signature.initSign(privateKey);      signature.update(src.getBytes());      byte[] result = signature.sign();      System.out.println("jdk dsa sign : " + Hex.encodeHexString(result));      //3.验证签名      X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(dsaPublicKey.getEncoded());      keyFactory = KeyFactory.getInstance("DSA");      PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);      signature = Signature.getInstance("SHA1withDSA");      signature.initVerify(publicKey);      signature.update(src.getBytes());      boolean bool = signature.verify(result);      System.out.println("jdk dsa verify : " + bool);    } catch (Exception e) {      e.printStackTrace();    }  }}

四、实现效果

jdk dsa sign : 302c0214310539f9e19ec98167a687eb4e8f91e7f47326bf021428080b7f0ad2ccffc71466998d8d364ba516e840
jdk dsa verify : true

五、应用场景

PS:关于加密解密感兴趣的朋友还可以参考本站在线工具:

在线RSA加密/解密工具:
http://tools.VeVB.COm/password/rsa_encode

文字在线加密解密工具(包含AES、DES、RC4等):
http://tools.VeVB.COm/password/txt_encode

MD5在线加密工具:
http://tools.VeVB.COm/password/CreateMD5Password

在线散列/哈希算法加密工具:
http://tools.VeVB.COm/password/hash_encrypt

在线MD5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160加密工具:
http://tools.VeVB.COm/password/hash_md5_sha

在线sha1/sha224/sha256/sha384/sha512加密工具:
http://tools.VeVB.COm/password/sha_encode

更多关于java相关内容感兴趣的读者可查看本站专题:《Java数学运算技巧总结》、《Java数据结构与算法教程》、《Java字符与字符串操作技巧总结》、《Java操作DOM节点技巧总结》和《Java缓存操作技巧汇总

希望本文所述对大家java程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表