简介

DSA是Schnorr和ElGamal签名算法的变种,被美国NIST作为DSfS(DigitalSignature Standard)。

DSA是基于整数有限域离散对数难题的,其安全性与RSA相比差不多。DSA的一个重要特点是两个素数公开,这样,当使用别人的p和q时,即使不知道私钥,你也能确认它们是否是随机产生的,还是作了手脚。RSA却做不到。

算法分类信息:

算法 密钥长度 默认长度 签名长度 实现的方
SHA1withDSA 512-65536
(64的整数倍)
1024 同密钥 JDK
SHA224withDSA 同上 1024 同密钥 BC
SHA256withDSA ... 1024 同密钥 BC
SHA384withDSA ... 1024 同密钥 BC
SHA512withDSA ... 1024 同密钥 BC

java实现:

package com.zoo.lion.security;import org.apache.commons.codec.binary.Hex;import java.security.*;
import java.security.interfaces.DSAPrivateKey;
import java.security.interfaces.DSAPublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;/*** @Author: xf* @Date: 2019/6/5 10:05* @Version 1.0*/
public class DSA {private static String src = "dsa security";public static void main(String[] args) throws Exception {jdkDSA();}public static void jdkDSA() throws Exception {//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[] res = signature.sign();System.out.println("签名:" + Hex.encodeHexString(res));//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(res);System.out.println("验证:" + bool);}
}

DSA算法实现数字签名--java实现相关推荐

  1. 用DSA算法实现数字签名

    下面是一个在JAVA语言中,使用DSA签名算法来进行进行数字签名的一个示例. DSA(Digital Signature Algorithm)是Schnorr和ElGamal签名算法的变种,被美国NI ...

  2. Java数字签名——DSA算法

    RSA数字加密算法参考:http://www.cnblogs.com/LexMoon/p/javaRSA.html DSS: 数字签名标准 DSA: 数字签名算法 DSA仅仅包含数字签名 ------ ...

  3. java dsa算法_DSA算法

    DSA(Digital Signature Algorithm)是Schnorr和ElGamal签名算法的变种,被美国NIST作为DSS(DigitalSignature Standard). DSA ...

  4. java RSA/DSA/ECDSA实现数字签名

    java RSA/DSA/ECDSA实现数字签名 标签: java RSADSAECDSA实现数字RSADSAECDSA实现数字签名 2015-12-13 14:51 1656人阅读 评论(0) 收藏 ...

  5. 数字签名技术 -- DSA算法

    DSA算法是1991年美国国家标准技术协会公布的数字签名标准(DSS)的核心算法.本质上是ElGamal数字签名算法,仅能与SHA系列算法结合,没有相应的MD融合算法. DSA算法和RSA算法的异同 ...

  6. 非对称加密 DSA算法

    原理 数字签名算法(DSA - Digital Signature Algorithm)是用于数字签名的算法,基于模算数和离散对数的复杂度.DSA是Schnorr和ElGamal签名方案的变体. DS ...

  7. java和c 的rsa加密算法_RSA算法签名技术Java与C++统一(加密解密结果一样)

    RSA算法签名技术Java与C++统一 (加密解密结果一样) 源代码下载地址:http://www.doczj.com/doc/64f44a94a0116c175f0e484d.html/produc ...

  8. [签名算法]DSA 算法

    DSA(Digital Signature Algorithm)是Schnorr和ElGamal签名算法的变种,被美国NIST作为DSS(DigitalSignature Standard). DSA ...

  9. 密码学专题 非对称加密算法指令概述 DSA算法指令

    DSA算法和DSA指令概述 DSA算法是美国国家标准的数字签名算法,只具备数字签名的功能不具备密钥交换的功能 生成DSA参数然后生成DSA密钥,DSA参数决定了DSA密钥的长度 三个指令 首先是dsa ...

最新文章

  1. Java内存模型深度解析:顺序一致性--转
  2. 对比SQL,学习Pandas操作:group_concat如何实现?
  3. Spring_HelloWord
  4. 前端学习(2737):重读vue电商网站47之生成打包报告
  5. leetcode226. 翻转二叉树
  6. 【Flink】Flink 报错 exited with a non-zero exit code 1
  7. lambda python aws_AWS Lambda Layer For Python Pakage
  8. splunk VS elasticsearch
  9. c语言回调函数_为什么计算机专业必学C语言?既然是基础,那为何很多人学不懂?...
  10. 鸿蒙系统下载地址_华为鸿蒙代码全开源
  11. 【计算机网络】网络层 : 数据交换方式 ( 电路交换 | 报文交换 | 分组交换 )★
  12. Bitbake基本语法
  13. 解决:Elasticsearch failed to map source
  14. 《当程序员的那些狗日日子》五
  15. Cannot find current proxy: Set 'exposeProxy' property on Advised to 'true' to 以及Spring事务失效的原因和解决方案
  16. 我的世界 服务器文件ess,我的世界指令大全 ess指令用法介绍
  17. 美团3年阿里4年,我的坎坷进阶之路
  18. 小程序云开发学习笔记(二)
  19. nodejs遍历一个目录下所有的文件
  20. B. Ela‘s Fitness and the Luxury Number codeforces 1737B

热门文章

  1. win7与ubuntu双系统,启动error:no such partition grub rescue
  2. R语言 ggplot2包载入时候报错,请大家帮忙看看,谢谢
  3. USB口的条形码扫描器接口编程(VB) 转
  4. 象棋里的天地炮与重炮
  5. C++ 缺省参数及函数重载分析
  6. 美通社企业新闻汇总 | 2019.2.14 | 燃石医学完成8.5亿融资;伊蒂之屋情人节携手中国区品牌大使黄明昊...
  7. 丢手帕问题 java_java入门小程序—17人游戏(丢手绢问题) | 学步园
  8. Sun发布全球首款“统一存储系统”Storage7000
  9. 设计模式之观察者模式 1
  10. isFile()exists() isDirectory()