java 实现电子签名_Java实现数字签名
一 数字签名算法
带有秘钥(公钥,私钥)的消息摘要算法
验证数据完整性,认证数据来源,抗否认
OSI参考模型
私钥签名,公钥验证
RSA,DSA,ECDSA
二 数字签名算法RSA
经典算法
MD,SHA两类
例子:jdkRSA 算法
1 packagecom.dzj.rsa;2
3 importjava.security.KeyFactory;4 importjava.security.KeyPair;5 importjava.security.KeyPairGenerator;6 importjava.security.PrivateKey;7 importjava.security.PublicKey;8 importjava.security.Signature;9 importjava.security.interfaces.RSAPrivateKey;10 importjava.security.interfaces.RSAPublicKey;11 importjava.security.spec.PKCS8EncodedKeySpec;12 importjava.security.spec.X509EncodedKeySpec;13
14 importorg.apache.commons.codec.binary.Hex;15
16 public classRSA {17 private static String src = "imooc security rsa";18
19 public static voidmain(String[] args) {20 jdkRSA();21 }22
23 public static voidjdkRSA() {24 try{25 //1 初始化密钥
26 KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");27 keyPairGenerator.initialize(512);28 KeyPair keyPair =keyPairGenerator.generateKeyPair();29
30 RSAPublicKey rsaPublicKey =(RSAPublicKey) keyPair.getPublic();31 RSAPrivateKey rsaPrivateKey =(RSAPrivateKey) keyPair.getPrivate();32
33 //2 私钥加密、公钥解密——加密34 //用私钥进行签名
35 PKCS8EncodedKeySpec pkcs8EncodedKeySpec = newPKCS8EncodedKeySpec(rsaPrivateKey.getEncoded());36
37 KeyFactory keyFactory = KeyFactory.getInstance("RSA");38 //执行key的转化
39 PrivateKey privateKey =keyFactory.generatePrivate(pkcs8EncodedKeySpec);40
41 //声明一个签名对象 使用JDK实现
42 Signature signature = Signature.getInstance("MD5withRSA");43 signature.initSign(privateKey);44 signature.update(src.getBytes());45 byte[] sign =signature.sign();46 System.out.println("私钥加密、公钥解密——加密:" +Hex.encodeHexString(sign));47
48 //3私钥加密、公钥解密——解密
49 X509EncodedKeySpec x509EncodedKeySpec = newX509EncodedKeySpec(rsaPublicKey.getEncoded());50 keyFactory = KeyFactory.getInstance("RSA");51 PublicKey publicKey =keyFactory.generatePublic(x509EncodedKeySpec);52 //创建签名对象
53 signature = Signature.getInstance("MD5withRSA");54 signature.initVerify(publicKey);55 signature.update(src.getBytes());56 boolean verify =signature.verify(sign);57 System.out.println("私钥加密、公钥解密——解密:" +verify);58
59 } catch(Exception e) {60 //TODO Auto-generated catch block
61 e.printStackTrace();62 }63
64 }65
66 }
View Code
数字签名算法----过程
三 数字签名算法DSA
DSS(Digital Signature Standard)数字签名标准
DSA(Digital Signature Algorithm)数字签名算法
DSA仅包含数字签名,没有办法进行加密通讯
RSA即包括加解密,又包括数字签名的算法
例子
1 packagecom.dzj.dsa;2
3 importjava.security.KeyFactory;4 importjava.security.KeyPair;5 importjava.security.KeyPairGenerator;6 importjava.security.PrivateKey;7 importjava.security.PublicKey;8 importjava.security.Signature;9 importjava.security.interfaces.DSAPrivateKey;10 importjava.security.interfaces.DSAPublicKey;11 importjava.security.spec.PKCS8EncodedKeySpec;12 importjava.security.spec.X509EncodedKeySpec;13
14 importorg.apache.commons.codec.binary.Hex;15
16 public classDSA {17
18 private static String src = "imooc security dsa";19
20 public static voidmain(String[] args) {21 jdkDSA();22 }23
24 public static voidjdkDSA() {25 try{26 //1.初始化密钥
27 KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("DSA");28 keyPairGenerator.initialize(512);29 KeyPair keyPair =keyPairGenerator.generateKeyPair();30 DSAPublicKey dsaPublicKey =(DSAPublicKey) keyPair.getPublic();31 DSAPrivateKey dsaPrivateKey =(DSAPrivateKey) keyPair.getPrivate();32
33 //2.执行签名 私钥进行签名
34 PKCS8EncodedKeySpec pkcs8EncodedKeySpec = newPKCS8EncodedKeySpec(dsaPrivateKey.getEncoded());35 KeyFactory keyFactory = KeyFactory.getInstance("DSA");36 PrivateKey privateKey =keyFactory.generatePrivate(pkcs8EncodedKeySpec);37 Signature signature = Signature.getInstance("SHA1withDSA");38 signature.initSign(privateKey);39 signature.update(src.getBytes());40 byte[] result =signature.sign();41 System.out.println("jdk dsa sign : " +Hex.encodeHexString(result));42
43 //3.验证签名
44 X509EncodedKeySpec x509EncodedKeySpec = newX509EncodedKeySpec(dsaPublicKey.getEncoded());45 keyFactory = KeyFactory.getInstance("DSA");46 PublicKey publicKey =keyFactory.generatePublic(x509EncodedKeySpec);47 signature = Signature.getInstance("SHA1withDSA");48 signature.initVerify(publicKey);49 signature.update(src.getBytes());50 boolean bool =signature.verify(result);51 System.out.println("jdk dsa verify : " +bool);52 } catch(Exception e) {53 e.printStackTrace();54 }55 }56
57 }
View Code
四 数字签名算法ECDSA
微软
Ellipticc Curve Digital Signature Algorithm,椭圆曲线数字签名算法
速度快,强度高,签名短
例子:
1 packagecom.dzj.ecdsa;2
3 importjava.security.KeyFactory;4 importjava.security.KeyPair;5 importjava.security.KeyPairGenerator;6 importjava.security.PrivateKey;7 importjava.security.PublicKey;8 importjava.security.Signature;9 importjava.security.interfaces.ECPrivateKey;10 importjava.security.interfaces.ECPublicKey;11 importjava.security.spec.PKCS8EncodedKeySpec;12 importjava.security.spec.X509EncodedKeySpec;13
14 importorg.apache.commons.codec.binary.Hex;15
16 public classECDSA {17 private static String src = "imooc security ecdsa";18
19 public static voidmain(String[] args) {20
21 jdkECDSA();22
23 }24
25 public static voidjdkECDSA() {26 try{27 //1 初始化密钥
28 KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("EC");29 keyPairGenerator.initialize(256);30 KeyPair keyPair =keyPairGenerator.generateKeyPair();31 ECPublicKey ecPublicKey =(ECPublicKey) keyPair.getPublic();32 ECPrivateKey ecPrivateKey =(ECPrivateKey) keyPair.getPrivate();33
34 //2 执行签名
35 PKCS8EncodedKeySpec pkcs8EncodedKeySpec = newPKCS8EncodedKeySpec(ecPrivateKey.getEncoded());36 KeyFactory keyFactory = KeyFactory.getInstance("EC");37 PrivateKey privateKey =keyFactory.generatePrivate(pkcs8EncodedKeySpec);38 Signature signature = Signature.getInstance("SHA1withECDSA");39 signature.initSign(privateKey);40 signature.update(src.getBytes());41 byte[] sign =signature.sign();42 System.out.println("jdk ecdsa sign:" +Hex.encodeHexString(sign));43
44 //3验证
45 X509EncodedKeySpec x509EncodedKeySpec = newX509EncodedKeySpec(ecPublicKey.getEncoded());46 keyFactory = KeyFactory.getInstance("EC");47 PublicKey publicKey =keyFactory.generatePublic(x509EncodedKeySpec);48 signature = Signature.getInstance("SHA1withECDSA");49 signature.initVerify(publicKey);50 signature.update(src.getBytes());51 boolean verify =signature.verify(sign);52 System.out.println("jdk ecdsa verify:" +verify);53 } catch(Exception e) {54 //TODO Auto-generated catch block
55 e.printStackTrace();56 }57
58 }59
60 }
View Code
java 实现电子签名_Java实现数字签名相关推荐
- java 实现电子签名_java swing实现手写板电子签名系统 | 学步园
java swing实现手写板电子签名系统 支持 手写板 ,触摸屏电脑,支持压强 压感效果......................... 部分代码 MyLeftPanel.java public ...
- java 加密 数字_java 加密数字签名
1)消息摘要: 这是一种与消息认证码结合使用以确保消息完整性的技术. 主要使用单向散列函数算法,可用于检验消息的完整性,和通过散列密码直接以文本形式保存等,目前广泛使用的算法有MD4.MD5.SHA- ...
- 用java的io做一个代码计数器,如何制作Java页面计数器_java
大庆采油六厂采油工艺研究所 王兵 王波 常常逛WWW的人,一定对许多起始页上的计数器感兴趣.每当你光临某个站点的起始页时,它的计数器就很亲切地告诉你,从某年某月某日开始,你是第几位光临的人.你可能也想 ...
- 【源码+图片素材+详细教程】Java游戏开发_Java开发经典游戏飞翔的小鸟_飞扬的小鸟_Java游戏项目Flappy Bird像素鸟游戏_Java课程设计项目
课程目标: 1.通过本课程的学习巩固Java的相关基础知识,例如循环判断,数组和集合的使用,对象的继承,接口的实现,窗口的创建,事件监听,图形绘制. 2.完成小鸟的移动,管道自动生成.碰撞死亡,计分系 ...
- java RSA/DSA/ECDSA实现数字签名
java RSA/DSA/ECDSA实现数字签名 标签: java RSADSAECDSA实现数字RSADSAECDSA实现数字签名 2015-12-13 14:51 1656人阅读 评论(0) 收藏 ...
- 【源码+教程】Java桌球游戏_Java初级项目_Java练手项目_Java项目实战_Java游戏开发
今天分享的Java开源游戏项目是桌球游戏,初学者也可以用来练习喔~课程详细讲解了一个桌球游戏的编写思路和流程,即使你刚学Java没多久,也可以跟随该教程视频完成属于你自己的桌球游戏!同时,还可以加深和 ...
- 【源码+项目部署】Java课程设计项目_Java人力资源管理系统
对就业和毕业都有帮助的Java实战项目来咯--人力资源管理系统! 人力资源管理系统 |Java项目2小时上手编写_源码+数据库拿走不谢!Java实战项目_Java开发https://www.bilib ...
- java jnlp 签名_JAVA JNLP组件数字签名制作步骤
为JAR签名需要两个工具: 1.用keytool来创建一个密匙(同时指定时效,多久会过期,默认只给 6个月) 2.用JARSigner用此密匙为JAR签名. 可以用同一个密匙来为多个JAR签名. 注意 ...
- java pdf电子签名_如何使用java在数字签名的pdf中添加空白页?
沧海一幻觉 要将Joeri的答案放到上下文中,请看Adobe技术白皮书AdobeAcrobat 9数字签名.更改和改进,尤其是它的"允许和不允许的更改"部分.这里是Adobe澄清允 ...
最新文章
- (C++)数组作为函数参数
- 编程软件python中的if用法-适合Python初学者的一些编程技巧
- C#中Split函数的使用
- 一天搞定CSS:表单(form)--20
- (整理)用户空间_内核空间以及内存映射
- 网站图片多服务器选多大,网站上的图片一般多大合适
- boost库中mutex、condition_variable与mutex::scoped_lock联合使用实现线程之间的通信
- weblogic时间问题
- 怎样在Word和LaTeX中打出黑底的圆圈数字?
- 一维和二维傅里叶变换的图片直观理解
- 安装spinningup填坑ERROR: Could not build wheels for mpi4py which use PEP 517
- java 第三方微信平台_微信公众账号第三方平台全网发布源码(java-jeewx)
- [Irving]字符串相似度-字符编辑距离算法(c#实现)
- 【ARXML专题】_14_提取Arxml中CAN Signal信号信息
- 如何使用方位X210来查看海康威视IP摄像头
- 链接脚本中 text、data、bss、rodata 段含义
- 如何在 VS Code 中编写、运行C语言程序 教程
- 问:未来5年的IT互联网行业,就业形势会是什么样的?
- SDN之NOS概述——云原生
- MAR在计算机组成原理上是啥,《计算机组成原理》(答案已补全).doc
热门文章
- ciscn_2019_n_4
- 献给小白的笔记day6
- windows10小技巧: 将手机投影到windows10上
- 数据传输方式串行快于并行
- 《流畅的Python》学习笔记(11):可迭代的对象、迭代器和生成器
- mysql 餐饮管理系统_Java Mysql 餐饮管理系统 过程心得记录
- 鼠标切换虚拟桌面 autohotkey
- 配置运营商光猫做交换机拓展网络
- 复旦大学硕士盲审 计算机学院,上海市硕士论文盲审 复旦大学论文抽检、盲审工作的通知...
- 养生秘方,专治各种小毛病,千万别弄丢了!