风也温柔

计算机科学知识库

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

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

  一、介绍

  DSS: 数字签名标准

  DSA: 数字签名算法

  DSA仅包含数字签名

  二、参数说明

  三、代码实现

  <pre class="code wbreak">
package com.imooc.security.dsa;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
<p>

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();
}

}
}
  

</pre></p>
  四、实现效果

  五、应用场景

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

  在线RSA加密/解密工具:

  文字在线加密解密工具(包含AES、DES、RC4等):

  MD5在线加密工具:

  在线散列/哈希算法加密工具:

  在线MD5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/-160加密工具:

  在线sha1////加密工具:

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

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

  文章来源:https://www.lmlphp.com/user/17383/article/item/545673/