DSA算法实现数字签名--java实现
简介
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实现相关推荐
- 用DSA算法实现数字签名
下面是一个在JAVA语言中,使用DSA签名算法来进行进行数字签名的一个示例. DSA(Digital Signature Algorithm)是Schnorr和ElGamal签名算法的变种,被美国NI ...
- Java数字签名——DSA算法
RSA数字加密算法参考:http://www.cnblogs.com/LexMoon/p/javaRSA.html DSS: 数字签名标准 DSA: 数字签名算法 DSA仅仅包含数字签名 ------ ...
- java dsa算法_DSA算法
DSA(Digital Signature Algorithm)是Schnorr和ElGamal签名算法的变种,被美国NIST作为DSS(DigitalSignature Standard). DSA ...
- java RSA/DSA/ECDSA实现数字签名
java RSA/DSA/ECDSA实现数字签名 标签: java RSADSAECDSA实现数字RSADSAECDSA实现数字签名 2015-12-13 14:51 1656人阅读 评论(0) 收藏 ...
- 数字签名技术 -- DSA算法
DSA算法是1991年美国国家标准技术协会公布的数字签名标准(DSS)的核心算法.本质上是ElGamal数字签名算法,仅能与SHA系列算法结合,没有相应的MD融合算法. DSA算法和RSA算法的异同 ...
- 非对称加密 DSA算法
原理 数字签名算法(DSA - Digital Signature Algorithm)是用于数字签名的算法,基于模算数和离散对数的复杂度.DSA是Schnorr和ElGamal签名方案的变体. DS ...
- java和c 的rsa加密算法_RSA算法签名技术Java与C++统一(加密解密结果一样)
RSA算法签名技术Java与C++统一 (加密解密结果一样) 源代码下载地址:http://www.doczj.com/doc/64f44a94a0116c175f0e484d.html/produc ...
- [签名算法]DSA 算法
DSA(Digital Signature Algorithm)是Schnorr和ElGamal签名算法的变种,被美国NIST作为DSS(DigitalSignature Standard). DSA ...
- 密码学专题 非对称加密算法指令概述 DSA算法指令
DSA算法和DSA指令概述 DSA算法是美国国家标准的数字签名算法,只具备数字签名的功能不具备密钥交换的功能 生成DSA参数然后生成DSA密钥,DSA参数决定了DSA密钥的长度 三个指令 首先是dsa ...
最新文章
- Java内存模型深度解析:顺序一致性--转
- 对比SQL,学习Pandas操作:group_concat如何实现?
- Spring_HelloWord
- 前端学习(2737):重读vue电商网站47之生成打包报告
- leetcode226. 翻转二叉树
- 【Flink】Flink 报错 exited with a non-zero exit code 1
- lambda python aws_AWS Lambda Layer For Python Pakage
- splunk VS elasticsearch
- c语言回调函数_为什么计算机专业必学C语言?既然是基础,那为何很多人学不懂?...
- 鸿蒙系统下载地址_华为鸿蒙代码全开源
- 【计算机网络】网络层 : 数据交换方式 ( 电路交换 | 报文交换 | 分组交换 )★
- Bitbake基本语法
- 解决:Elasticsearch failed to map source
- 《当程序员的那些狗日日子》五
- Cannot find current proxy: Set 'exposeProxy' property on Advised to 'true' to 以及Spring事务失效的原因和解决方案
- 我的世界 服务器文件ess,我的世界指令大全 ess指令用法介绍
- 美团3年阿里4年,我的坎坷进阶之路
- 小程序云开发学习笔记(二)
- nodejs遍历一个目录下所有的文件
- B. Ela‘s Fitness and the Luxury Number codeforces 1737B
热门文章
- win7与ubuntu双系统,启动error:no such partition grub rescue
- R语言 ggplot2包载入时候报错,请大家帮忙看看,谢谢
- USB口的条形码扫描器接口编程(VB) 转
- 象棋里的天地炮与重炮
- C++ 缺省参数及函数重载分析
- 美通社企业新闻汇总 | 2019.2.14 | 燃石医学完成8.5亿融资;伊蒂之屋情人节携手中国区品牌大使黄明昊...
- 丢手帕问题 java_java入门小程序—17人游戏(丢手绢问题) | 学步园
- Sun发布全球首款“统一存储系统”Storage7000
- 设计模式之观察者模式 1
- isFile()exists() isDirectory()