Java数字签名——DSA算法
RSA数字加密算法参考:http://www.cnblogs.com/LexMoon/p/javaRSA.html
DSS: 数字签名标准
DSA: 数字签名算法
DSA仅仅包含数字签名
————————————————————————————————————
密钥长度均为512~1024(64的整数倍),默认长度为1024
实现方JDK:
SHA1withDSA
实现方BD:
SHA224withDSA
SHA256withDSA
SHA384withDSA
SHA512withDSA
——————————————————————————————————
package DSA; import com.sun.org.apache.xerces.internal.impl.dv.util.HexBin; import java.security.*;
import java.security.interfaces.DSAPrivateKey;
import java.security.interfaces.DSAPublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec; public class Dsa {
public static String src = "hello berber" ;
public static void main(String[] args) {
jdkDSA();
}
public static void jdkDSA(){
try{
// 初始化:
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("DSA") ;
keyPairGenerator.initialize(512);
KeyPair keyPair = keyPairGenerator.generateKeyPair(); DSAPublicKey dsaPublicKey = (DSAPublicKey)keyPair.getPublic() ;
DSAPrivateKey dsaPrivateKey = (DSAPrivateKey)keyPair.getPrivate() ;
// 签名:
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 arr[] = signature.sign() ;
System.out.println("jdk dsa sign:"+ HexBin.encode(arr));
// 验证签名
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(arr) ;
System.out.println("jdk dsa verify:"+bool);
}catch (Exception e){ }
}
}
结果:

过程:
构建密钥对:
发送方: 1.构建密钥对
2.公布密钥
发送数据 :
发送方: 1.使用私钥对数据签名
2.发送签名,数据
3.使用公钥,签名验证数据
Java数字签名——DSA算法的更多相关文章
- Java数字签名——RSA算法
数字签名:带有密钥(公钥,私钥)的消息摘要算法. 验证数据的完整性,认证数据的来源,抗否性 OSI参考模型 私钥签名,公钥验证 签名算法:RSA,DSA,ECDSA 算法1 :RSA MD,SHA两类 ...
- Java数字签名——ECDSA算法
ECDSA 例如微软产品的序列号的验证算法. Elliptic Curve Digital Signature Algorithm,椭圆曲线数字签名算法. 速度快,强度高,签名短 —————————— ...
- 一个基于RSA算法的Java数字签名例子
原文地址:一个基于RSA算法的Java数字签名例子 一.前言: 网络数据安全包括数据的本身的安全性.数据的完整性(防止篡改).数据来源的不可否认性等要素.对数据采用加密算法加密可以保证数据本身的安全性 ...
- DSA 算法
一.简介 DSA算法是Schnorr和ElGamal签名算法的变种,被美国NIST作为DSS(DigitalSignature Standard).它是一种公开密钥算法,用作数字签名. http:// ...
- [转帖]RSA算法与DSA算法的区别
RSA算法与DSA算法的区别 https://cloud.tencent.com/developer/news/254061 文章来源:企鹅号 - SuperFullStack 本文译自:StackE ...
- java加解密算法
什么是加密算法?百度百科给出的解释如下: 数据加密的基本过程就是对原来为明文的文件或数据按某种算法进行处理,使其成为不可读的一段代码,通常称为“密文”,使其只能在输入相应的密钥之后才能显示出本来内容, ...
- 数字签名---RSA算法
保证信息在传输过程中的安全性: 保密通信.密钥交换.数字签名. RSA算法 Diffie-Hellman算法 DSA算法 保密通信 √ × × 密钥交换 √ √ × 数字签 ...
- Java常用排序算法+程序员必须掌握的8大排序算法+二分法查找法
Java 常用排序算法/程序员必须掌握的 8大排序算法 本文由网络资料整理转载而来,如有问题,欢迎指正! 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排 ...
- Java字符串排列算法
Java字符串排列算法 题目:现有ABCDE 5个球 构成的排列组合 可重复抽取 最多取到16个 共有多少种组合方式? 比如:取1个球可以构成的组合有 A B C D E 共5种,取2个球可以构成的组 ...
随机推荐
- python下划线作用初识
单下划线(例:_textchar) 以单下划线做前缀的名称指定了这个名称是"私有的".在 有些 导入import * 的场景中,下一个使用你代码的人(或者你本人)会明白这个名称仅内 ...
- SVN中服务器地址变更
SVN中服务器地址变更后不需要重新导项目,只要修改下SVN的服务器地址,更新一下即可.有两种方法: 方法一:通过MyEclipse中SVN插件 1.选择window→show view→other→S ...
- php 在foreach中循环数组的时候添加元素的属性
foreach($arr as $k => &$v){ //注意,由于上面遍历的时候写了地址传值符&, //所以下面可以直接给$v 赋值;如果不写&符号,下面这样写是没有 ...
- wamp图标为黄色(非端口号问题)
1.Win键+R 输入:services.msc 进入服务,找到wamp,看哪个服务没有启动 2.手动启动apache服务失败,弹出以下错误 3.然后在cmd命令行中切换到你的apache的bin目 ...
- zabbix agent(Active)模式 /克隆修改模板
这个模式主要是用于server端被动接收数据,不发送探测请求 agent端主动发送数据,不接收探测请求 被监控端 zabbix_Agentd.conf 的配置调整 LogFile=/tmp/zabbi ...
- IDEA精髓快捷键
删除一行:Ctrl+X 快速查找:Ctrl+F 打开文件目录结构: Ctrl+F12 可以把代码包在一个块内:Ctrl+Alt+T 替换文本:Ctrl+R, Alt+Shift+Up/Down,上/下 ...
- AppScan 扫描测试策略
使用 AppScan 进行扫描 针对大型网站的扫描,我们按照戴明环 PDCA 的方法论来进行规划和讨论,建议 AppScan 使用步骤:计划(Plan).执行(Do).检查(check).分析(Ana ...
- 【分布式】ZooKeeper学习之一:安装及命令行使用
ZooKeeper学习之一:安装及命令行使用 一直都想着好好学一学分布式系统,但是这拖延症晚期也是没得治了,所以干脆强迫自己来写一个系列博客,从zk的安装使用.客户端调用.涉及到的分布式原理.选举过程 ...
- C++——带默认参数值的函数
函数在声明时可以预先给出默认的形参值,调用时如给出实参,则采用实参值,否则采用预先给出的默认参数值. ,) { return x + y;} int main() { add(,);//10+20 a ...
- Mysql基础安装,初视篇
mysql 跟所有的数据库软件一样分为 服务端和客户端: 下载:在官网里面选择 download 社区版本,mysql,社区版本 安装: win环境下: 第一步:解压文件出来 第二步:在bin文件下 ...