本文实例讲述了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.jb51.net/password/rsa_encode

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

http://tools.jb51.net/password/txt_encode

MD5在线加密工具:http://tools.jb51.net/password/CreateMD5Password

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

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

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

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

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

dsa的java实现_Java数字签名算法DSA实例详解相关推荐

  1. java装饰模式_Java装饰者模式实例详解

    本文实例讲述了Java装饰者模式.分享给大家供大家参考,具体如下: 装饰模式 在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对象,也就是装饰来包裹真实的对象. 装 ...

  2. java写exe程序实例,java实现可安装的exe程序实例详解

    java实现可安装的exe程序实例详解 通过编写java代码,实现可安装的exe文件的一般思路: 1.在eclipse中创建java项目,然后编写java代码,将编写好的java项目导出一个.jar格 ...

  3. java线程和内核线程的,Java中内核线程理论及实例详解

    1.概念 内核线程是直接由操作系统内核控制的,内核通过调度器来完成内核线程的调度并负责将其映射到处理器上执行.内核态下的线程执行速度理论上是最高的,但是用户不会直接操作内核线程,而是通过内核线程的接口 ...

  4. java中List的用法和实例详解

    Java中List的用法和实例详解 List的用法 List包括List接口以及List接口的所有实现类.因为List接口实现了Collection接口,所以List接口拥有Collection接口提 ...

  5. java中匿名内部类详解_java 中匿名内部类的实例详解

    搜索热词 java 中匿名内部类的实例详解 原来的面貌: class TT extends Test{ void show() { System.out.println(s+"~~~哈哈&q ...

  6. java读取本地文件_java 读取本地文件实例详解

    java 读取本地文件实例详解 用javax.xml.w3c解析 实例代码: package cn.com.xinli.monitor.utils; import org.w3c.dom.Docume ...

  7. java list 移除_java 中List删除实例详解

    java 中List删除实例详解 1.循环删除List中的元素 public static void main(String[] args) { List t=new ArrayList(); for ...

  8. java linkedlist实例_Java Linkedlist原理及实例详解

    这篇文章主要介绍了Java Linkedlist原理及实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 定义:linkedlist属于链表结构 ...

  9. java 工厂模式详解_java 工厂模式的实例详解

    java 工厂模式的实例详解 工厂方法中的"工厂"和我们平常理解的一样:用于生产产品. 而客户是要和产品打交道,所以工厂方法模式的意义在于把客户和产品分开,达到解耦和更灵活的目的. ...

最新文章

  1. 大白菜软件常用功能介绍
  2. 第四章:2.串 -- 串的模式匹配算法(KMP)
  3. 【图神经网络】基于GNN的不同变种及其应用
  4. SpringBoot 自带工具类~ObjectUtils
  5. 编程中的蛇形填空问题_PCB—蛇形线的作用,这次真的是把你搞懂了
  6. 数据:2020年加密货币领域风险投资超过30亿美元
  7. oracle 表复制 long,【学习笔记】Oracle数据库使用copy实现long类型转移表空间案例 ORA-00997...
  8. 【渝粤教育】国家开放大学2018年春季 7392-21TMatlab语言及其应用 参考试题
  9. python爬取淘宝网页信息
  10. java添加日志打印出sql语句_实现Mybatis在控制台和日志文件中打印SQL语句
  11. element表格动态合并多列
  12. 加密保护软件 WinLicense常见问题整理大全(六)
  13. excel自动填充脚本(awk)
  14. 开放式运动耳机排行榜,排行靠前的五款高性能耳机分享
  15. 苹果关闭 iOS 14.4.2 系统验证通道
  16. 自整理Java面试题集锦(Java基础 1)
  17. rem与px之间的转换
  18. SQL SERVER 变量赋值
  19. wl_15 Scanner使用
  20. 1000瓶毒水的问题

热门文章

  1. 力扣 6010. 完成旅途的最少时间
  2. 彭博社:Web3 巨大潜力之下的未解之谜
  3. vscode在html看到图片的插件_PPT做得又慢又丑?低调分享3款PPT辅助插件,轻松制作炫酷PPT...
  4. Android 修改昵称
  5. 2019ROS暑期学校之如故如新
  6. c语言中 p2 amp n1表示什么意思,2005年9月全国计算机等级考试二级C语言笔试试题及答案mjj...
  7. VS2010中使用zxing识别图片二维码
  8. 〖全域运营实战白宝书 - 运营角色认知篇①〗- 初识运营,明晰运营的学习路径
  9. ICMP协议(网际控制报文协议)
  10. 改善脑力的70条方法