java基础----数字签名算法的介绍
数字签名(又称公钥数字签名)是一种类似写在纸上的普通的物理签名,但是使用了公钥加密领域的技术实现,用于鉴别数字信息的方法。关于数字签名的介绍,可以参见百度百科:http://baike.baidu.com/view/7626.htm。今天,我们就开始学习java中数字签名的使用。
项目结构如下:
DSA算法
一、 HuhxDSA.java
package com.huhx.security;import java.security.KeyFactory; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.PrivateKey; import java.security.PublicKey; import java.security.Signature; import java.security.interfaces.DSAPrivateKey; import java.security.interfaces.DSAPublicKey; import java.security.spec.PKCS8EncodedKeySpec; import java.security.spec.X509EncodedKeySpec;import org.apache.commons.codec.binary.Hex;/*** writer: huhx*/ public class HuhxDSA {private final static String src = "http://www.cnblogs.com/huhx";public static void main(String[] args) {// 初始化签名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[] result = signature.sign();System.out.println("jdk dsa sign: " + Hex.encodeHexString(result));// 验证签名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(result);System.out.println("jdk dsa: " + bool);} catch (Exception e) {// TODO Auto-generated catch block e.printStackTrace();}} }
二、 运行结果如下:
jdk dsa sign: 302d0215009461ae45922c11159d3b6dc4c70eb0748763d23202146f5f9a5eedb36a760cf8b9b1d1d1fdc10636aafe jdk dsa: true
RSA算法
一、 HuhxRSA.java
package com.huhx.security;import java.security.KeyFactory; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.PrivateKey; import java.security.PublicKey; import java.security.Signature; import java.security.interfaces.RSAPrivateKey; import java.security.interfaces.RSAPublicKey; import java.security.spec.PKCS8EncodedKeySpec; import java.security.spec.X509EncodedKeySpec;import org.apache.commons.codec.binary.Hex;/*** writer: huhx*/ public class HuhxRSA {private final static String src = "http://www.cnblogs.com/huhx";public static void main(String[] args) {try {// 初始化签名KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA");generator.initialize(512);KeyPair keyPair = generator.generateKeyPair();RSAPublicKey rsaPublicKey = (RSAPublicKey) keyPair.getPublic();RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) keyPair.getPrivate();// 执行签名PKCS8EncodedKeySpec encodedKeySpec = new PKCS8EncodedKeySpec(rsaPrivateKey.getEncoded());KeyFactory keyFactory = KeyFactory.getInstance("RSA");PrivateKey privateKey = keyFactory.generatePrivate(encodedKeySpec);Signature signature = Signature.getInstance("MD5withRSA");signature.initSign(privateKey);signature.update(src.getBytes());byte[] result = signature.sign();System.out.println("jdk rsa sign: " + Hex.encodeHexString(result));// 验证签名X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(rsaPublicKey.getEncoded());keyFactory = KeyFactory.getInstance("RSA");PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);signature = Signature.getInstance("MD5withRSA");signature.initVerify(publicKey);signature.update(src.getBytes());boolean bool = signature.verify(result);System.out.println("jdk rsa: " + bool);} catch (Exception e) {e.printStackTrace();}} }
二、 运行结果如下:
jdk rsa sign: 564dc7f96c85a7a42e579ae191997c892f234272d220e3f062cf52071e827164fadd52720b69704979fc11810bdbf92b01dd3f5f26a621ffe699ef601d08fb6c jdk rsa: true
ECDSA算法
一、 HuhxECDSA.java
package com.huhx.security;import java.security.KeyFactory; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.PrivateKey; import java.security.PublicKey; import java.security.Signature; import java.security.interfaces.ECPrivateKey; import java.security.interfaces.ECPublicKey; import java.security.spec.PKCS8EncodedKeySpec; import java.security.spec.X509EncodedKeySpec;import org.apache.commons.codec.binary.Hex;/*** writer: huhx*/ public class HuhxECDSA {private final static String src = "mhttp://www.cnblogs.com/huhx";public static void main(String[] args) {try {// 初始化签名KeyPairGenerator generator = KeyPairGenerator.getInstance("EC");generator.initialize(256);KeyPair keyPair = generator.generateKeyPair();ECPublicKey ecPublicKey = (ECPublicKey) keyPair.getPublic();ECPrivateKey ecPrivateKey = (ECPrivateKey) keyPair.getPrivate();// 执行签名PKCS8EncodedKeySpec encodedKeySpec = new PKCS8EncodedKeySpec(ecPrivateKey.getEncoded());KeyFactory keyFactory = KeyFactory.getInstance("EC");PrivateKey privateKey = keyFactory.generatePrivate(encodedKeySpec);Signature signature = Signature.getInstance("SHA1withECDSA");signature.initSign(privateKey);signature.update(src.getBytes());byte[] result = signature.sign();System.out.println("jdk ecdsa sign: " + Hex.encodeHexString(result));// 验证签名X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(ecPublicKey.getEncoded());keyFactory = KeyFactory.getInstance("EC");PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);signature = Signature.getInstance("SHA1withECDSA");signature.initVerify(publicKey);signature.update(src.getBytes());boolean bool = signature.verify(result);System.out.println("jdk ecdsa: " + bool);} catch (Exception e) {e.printStackTrace();}} }
二、 运行结果如下:
jdk ecdsa sign: 30460221009b80596c51ccdf19c5e8e825aca6d85e549a30ee72a1e9b094f7b3a8c8b9310902210098e8dcc6ea932142d8cd9dd80c08fff7359f796571f8a973d3ca6e2dc0931904 jdk ecdsa: true
友情链接
转载于:https://www.cnblogs.com/huhx/p/javaSignature.html
java基础----数字签名算法的介绍相关推荐
- Java基础-Date类常用方法介绍
Java基础-Date类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.毫秒值概念 我们在查阅Date类的API文档时,会发现这样的一句话:"The cl ...
- java基础-Eclipse开发工具介绍
java基础-Eclipse开发工具介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 所谓工欲善其事必先利其器,即将身为一名Java开发工程师怎么能没有一款好使的IDE呢?今天就 ...
- java基础-BigDecimal类常用方法介绍
java基础-BigDecimal类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.BigDecimal类概述 我们知道浮点数的计算结果是未知的.原因是计算机二进制 ...
- java基础-Idea开发工具介绍
java基础-Idea开发工具介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 之前给大家介绍过一款Java的IDE叫eclipse,有些功能用起来不是很得心应手,尤其是在导报的 ...
- java实现数字签名算法
文章目录 前言 一.数字签名简述 二.数字签名算法家谱 三.代码实现 1.引入jar包 2.RSA数字签名实现 总结 前言 数字签名是手写签名在计算机软件应用中的一种体现,同样起到了抗否认的作用.本文 ...
- Java之数字签名算法
目录 数字签名算法概述 数字签名算法--RSA DSA算法列表:MD.SHA两类 主要流程: 代码实现: 数字签名算法--DSA DSA算法列表: 主要流程: 代码实现: 数字签名算法--ECDSA ...
- 【Java基础】之 JSR 介绍
JSR是Java Specification Requests的缩写,意思是Java 规范提案.是指向JCP(Java Community Process)提出新增一个标准化技术规范的正式请求.任何人 ...
- Java基础篇:简单介绍一下final
一个变量可以声明为final,这样做的目的是阻止它的内容被修改.这意味着在声明final变量的时候,你必须初始化它(在这种用法上,final类似于C/C++中的const).例如: final int ...
- 【Java基础教程】(一)入门介绍篇 · 上:快速掌握核心概念,开启Java世界的探索之旅!这篇Java入门宝典助你翱翔~
Java基础教程之入门介绍 · 上 本节学习目标 1️⃣ Java发展简史 1.1 诞生 1.2 发展 1.3 分支 2️⃣ 特征 3️⃣ 代码执行过程
最新文章
- 【设计模式】 模式PK:策略模式VS状态模式
- 技术前沿:Redis推出性能碾压ES和Mongo的大杀器
- python课程设计报告总结-上海python课程设计报告目的
- [LGP4707] 重返现世
- Python中包(package)的调用方式
- python课本第二章答案_《Python自然语言处理》答案第一、二章
- python磁盘io_python监控磁盘io
- 设置跳转到新的actvity之后不可返回
- session mysql java_PHP自定义session处理方法,保存到MySQL数据库中
- oracle 循环继续,oracle – 是否可以继续从异常循环?
- mysql执行语句返回主键_mysql语句insert后返回主键
- Linux下使用Netfilter强制清除IPv4 DF标志
- hdu6287(分解质因数+二分)
- 杂谈之什么是FullGC
- 用python写飞机大战过几天不能运行了_最近写的一个飞机大战的程序,写到一半有一个已经写好的函数但不能运用,强行运行程序秒退,百思不得其姐...
- 实战:k8s之Longhorn备份恢复-2022.2.26
- 微信公众号图文 点击显示图片效果
- php简易登录注册PHP+MySQL
- JVM 工作原理和即时编译(JIT)
- iOS程序员眼中的首次使用产品体验