一 数字签名算法

带有秘钥(公钥,私钥)的消息摘要算法

验证数据完整性,认证数据来源,抗否认

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实现数字签名相关推荐

  1. java 实现电子签名_java swing实现手写板电子签名系统 | 学步园

    java swing实现手写板电子签名系统 支持 手写板 ,触摸屏电脑,支持压强 压感效果......................... 部分代码  MyLeftPanel.java public ...

  2. java 加密 数字_java 加密数字签名

    1)消息摘要: 这是一种与消息认证码结合使用以确保消息完整性的技术. 主要使用单向散列函数算法,可用于检验消息的完整性,和通过散列密码直接以文本形式保存等,目前广泛使用的算法有MD4.MD5.SHA- ...

  3. 用java的io做一个代码计数器,如何制作Java页面计数器_java

    大庆采油六厂采油工艺研究所 王兵 王波 常常逛WWW的人,一定对许多起始页上的计数器感兴趣.每当你光临某个站点的起始页时,它的计数器就很亲切地告诉你,从某年某月某日开始,你是第几位光临的人.你可能也想 ...

  4. 【源码+图片素材+详细教程】Java游戏开发_Java开发经典游戏飞翔的小鸟_飞扬的小鸟_Java游戏项目Flappy Bird像素鸟游戏_Java课程设计项目

    课程目标: 1.通过本课程的学习巩固Java的相关基础知识,例如循环判断,数组和集合的使用,对象的继承,接口的实现,窗口的创建,事件监听,图形绘制. 2.完成小鸟的移动,管道自动生成.碰撞死亡,计分系 ...

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

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

  6. 【源码+教程】Java桌球游戏_Java初级项目_Java练手项目_Java项目实战_Java游戏开发

    今天分享的Java开源游戏项目是桌球游戏,初学者也可以用来练习喔~课程详细讲解了一个桌球游戏的编写思路和流程,即使你刚学Java没多久,也可以跟随该教程视频完成属于你自己的桌球游戏!同时,还可以加深和 ...

  7. 【源码+项目部署】Java课程设计项目_Java人力资源管理系统

    对就业和毕业都有帮助的Java实战项目来咯--人力资源管理系统! 人力资源管理系统 |Java项目2小时上手编写_源码+数据库拿走不谢!Java实战项目_Java开发https://www.bilib ...

  8. java jnlp 签名_JAVA JNLP组件数字签名制作步骤

    为JAR签名需要两个工具: 1.用keytool来创建一个密匙(同时指定时效,多久会过期,默认只给 6个月) 2.用JARSigner用此密匙为JAR签名. 可以用同一个密匙来为多个JAR签名. 注意 ...

  9. java pdf电子签名_如何使用java在数字签名的pdf中添加空白页?

    沧海一幻觉 要将Joeri的答案放到上下文中,请看Adobe技术白皮书AdobeAcrobat 9数字签名.更改和改进,尤其是它的"允许和不允许的更改"部分.这里是Adobe澄清允 ...

最新文章

  1. (C++)数组作为函数参数
  2. 编程软件python中的if用法-适合Python初学者的一些编程技巧
  3. C#中Split函数的使用
  4. 一天搞定CSS:表单(form)--20
  5. (整理)用户空间_内核空间以及内存映射
  6. 网站图片多服务器选多大,网站上的图片一般多大合适
  7. boost库中mutex、condition_variable与mutex::scoped_lock联合使用实现线程之间的通信
  8. weblogic时间问题
  9. 怎样在Word和LaTeX中打出黑底的圆圈数字?
  10. 一维和二维傅里叶变换的图片直观理解
  11. 安装spinningup填坑ERROR: Could not build wheels for mpi4py which use PEP 517
  12. java 第三方微信平台_微信公众账号第三方平台全网发布源码(java-jeewx)
  13. [Irving]字符串相似度-字符编辑距离算法(c#实现)
  14. 【ARXML专题】_14_提取Arxml中CAN Signal信号信息
  15. 如何使用方位X210来查看海康威视IP摄像头
  16. 链接脚本中 text、data、bss、rodata 段含义
  17. 如何在 VS Code 中编写、运行C语言程序 教程
  18. 问:未来5年的IT互联网行业,就业形势会是什么样的?
  19. SDN之NOS概述——云原生
  20. MAR在计算机组成原理上是啥,《计算机组成原理》(答案已补全).doc

热门文章

  1. ciscn_2019_n_4
  2. 献给小白的笔记day6
  3. windows10小技巧: 将手机投影到windows10上
  4. 数据传输方式串行快于并行
  5. 《流畅的Python》学习笔记(11):可迭代的对象、迭代器和生成器
  6. mysql 餐饮管理系统_Java Mysql 餐饮管理系统 过程心得记录
  7. 鼠标切换虚拟桌面 autohotkey
  8. 配置运营商光猫做交换机拓展网络
  9. 复旦大学硕士盲审 计算机学院,上海市硕士论文盲审 复旦大学论文抽检、盲审工作的通知...
  10. 养生秘方,专治各种小毛病,千万别弄丢了!