Java密码学之数字签名

密码系统是加密技术及其附带基础工具的实现,以提供信息安全服务。基本密码系统的各种组件是明文,加密算法,密文,解密算法,加密密钥和解密密钥。其中加密密钥和解密密钥是:

  • 加密密钥是发件人已知的值。发送方将加密密钥与明文一起输入加密算法,以便计算密文。
  • 解密密钥是接收方已知的值。解密密钥与加密密钥有关,但并不总是与之相同。接收器将解密密钥与密文一起输入到解密算法中以便计算明文。

Java密码体系结构(JCA)是一组API,用于实现现代密码术的概念,如数字签名,消息摘要,证书,加密,密钥生成和管理,以及安全随机数生成等。

1,创建密钥对生成器

KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("DSA");

2,初始化密钥对生成器
keyPairGen.initialize(2048);

3,生成密钥

KeyPair pair = keyPairGen.generateKeyPair();

4,创建签名对象

Signature sign = Signature.getInstance("SHA256withDSA");

5,初始化签名

sign.initSign(privKey);
//"Hello how are you"为代签名的内容,实际情况中会有很多内容
byte[] bytes = "Hello how are you".getBytes();

6,将需要签名的内容设置到签名对象中

sign.update(bytes);

7,签名,返回签名后的内容

byte[] signature = sign.sign();
System.out.println("签名后的内容:"+new String(signature));

8,验证签名

sign.initVerify(pair.getPublic());
sign.update(bytes);
boolean bool = sign.verify(signature);

9,完整过程

import java.security.*;public class SignDemo {public static void main(String[] args) throws NoSuchAlgorithmException, InvalidKeyException, SignatureException {//创建密钥对生成器,后面算法选择有: DiffieHellman,DSA,RSA 三种,如果是其他的话,就会抛出异常NoSuchAlgorithmExceptionKeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("DSA");//初始化密钥对生成器,常用参数是长度,大于要加密内容的字节长度keyPairGen.initialize(2048);//生成密钥对(公钥和私钥)KeyPair pair = keyPairGen.generateKeyPair();//获取刚成成的密钥对中的私钥PrivateKey privKey = pair.getPrivate();//创建签名对象,后面的算法有3种,SHA1withDSA,SHA1withRSA,SHA256withRSA,如果不是上面3种之一,就会抛出异常NoSuchAlgorithmExceptionSignature sign = Signature.getInstance("SHA256withDSA");//初始化签名sign.initSign(privKey);//"Hello how are you"为代签名的内容,实际情况中会有很多内容byte[] bytes = "Hello how are you".getBytes();//将需要签名的内容设置到签名对象中sign.update(bytes);//签名,返回签名后的内容byte[] signature = sign.sign();System.out.println("签名后的内容:"+new String(signature));//下面是验证签名的过程,实际情况中,应该是在不同的方法内//用公钥初始化签名验证过程sign.initVerify(pair.getPublic());//将明文(未签名的内容)设置到签名验证对象中sign.update(bytes);//验证签名boolean bool = sign.verify(signature);if(bool) {System.out.println("Signature verified");} else {System.out.println("Signature failed");}}
}

注意和自己的实际场景结合使用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/107111.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《向量数据库指南》——向量数据库内核面临的技术挑战及应对措施

最近一年,以 ChatGPT、LLaMA 为代表的大语言模型的兴起,将向量数据库的发展推向了新的高度。 向量数据库是一种在机器学习和人工智能领域日益流行的新型数据库,它能够帮助支持基于神经网络而不是关键字的新型搜索引擎。向量数据库不同于传统的…

CMake+CLion+Qt配置

在这里我下载MSVC的工具包,并没有下载Visual Studio。 配置编译环境 下载Visual Studio,其中有MSVC编译工具,下载MSVC工具包, 工具包下载链接:https://visualstudio.microsoft.com/zh-hans/visual-cpp-build-tools/ …

第5篇 vue的通信框架axios和ui框架-element-ui以及node.js

一 axios的使用 1.1 介绍以及作用 axios是独立于vue的一个项目,基于promise用于浏览器和node.js的http客户端。 在浏览器中可以帮助我们完成 ajax请求的发送在node.js中可以向远程接口发送请求 1.2 案例使用axios实现前后端数据交互 1.后端代码 2.前端代码 &…

Linux 下 C语言版本的线程池

目录 1. 线程池引入 2. 线程池介绍 3. 线程池的组成 4. 任务队列 5. 线程池定义 6. 头文件声明 7. 函数实现 8. 测试代码 1. 线程池引入 我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题:如果并发的线程数…

循环购模式:一种新型的电商模式,让你的生意更轻松

你是否想过,你的商品能够以一种更高效、更环保、更有趣的方式销售给顾客?你是否想过,你的顾客能够以一种更低成本、更高回报、更多互动的方式享受你的商品?如果你的答案是肯定的,那么你一定要了解一下循环购模式。 循环…

IDEA的快捷键大全

快捷键 说明 IntelliJ IDEA 的便捷操作性,快捷键的功劳占了一大半,对于各个快捷键组合请认真对待。IntelliJ IDEA 本身的设计思维是提倡键盘优先于鼠标的,所以各种快捷键组合层出不穷,对于快捷键设置也有各种支持,对…

floodfill算法(洪水灌溉算法)

一)floodfill算法简介: 二)图像渲染 733. 图像渲染 - 力扣(LeetCode) class Solution {int[] dx {1, 0, 0, -1};int[] dy {0, 1, -1, 0};//上下搜索的时候要使用向量数组int row0;int col0;int target0;public void dfs(int[][] image,int i,int j,int…

STC15/8单片机特有的PWM寄存器和普通定时器实现PWM输出

STC15/8单片机特有的PWM寄存器和普通定时器实现PWM输出 🌿主要针对STC15W4型号特有的6通道15位专门的高精度PWM。 🌿STC8系列 ✨STC15W4K32S4系列单片机具有6通道15位专门的高精度PWM(带死区控制)和2通道CCP(利用它的高速脉冲输出功能可实现11~16位PWM);(STC15F/L2K60S2系…

Mysql同步数据到Doris的踩坑过程

问题背景 由于项目需要,需要把多个Mysql数据库的数据同步到Doris数据库,然后利用Doris强调的计算和查询能力,来满足业务需求。有关Doris可以查看它的官方文档来了解它。 seatunnel的使用到放弃 缘起 从《第十届GIAC全球互联网架构大会》了…

口袋参谋:淘宝不限类目,透视竞品实时销量!快试试这个插件

​在运营一家店铺之前,可以先了解各类目宝贝的市场行情,及时掌握不同类目宝贝的价格、销售情况,根据需求制定出属于自己的营销策略。 【可跨类目竞店透视】功能: 支持一键获取任意店铺宝贝概况信息 【跨类目竞店透视】功能使用 …

C/C++之链表的建立

个人主页:点我进入主页 专栏分类:C语言初阶 C语言程序设计————KTV C语言小游戏 C语言进阶 C语言刷题 欢迎大家点赞,评论,收藏。 一起努力,一起奔赴大厂。 目录 1.头插 1.1简介 1.2代码实现头插 …

PyCharm克隆github上开源的项目

PyCharm怎么clone github上开源的项目 一、先要确保PyCharm正确的配置了Git 如果你已经在PyCharm中配置好了Git,可以跳过此步骤,直接看下一步。 那么怎么在PyCharm中配置Git呢? 百度搜索Git安装包,安装过程不再多说&#xff0…