当前位置: 首页 > news >正文

关于加解密、加签、验签等

目录

1.密码学常用术语: 

2.加签、验签

3.私钥、公钥、证书

4.根据证书获取证书序列号等相关代码


为了确保数据传输和数据存储的安全,我们可以通过特定的算法,将数据明文加密成复杂的密文。

1.密码学常用术语:

  • 明文:未加密的数据
  • 密文:明文经过加密后的数据
  • 加密:将明文转换为密文的过程
  • 解密:将密文转换为明文的过程
  • 加密算法:将明文转换为密文的转换算法
  • 解密算法:将密文转换为明文的转换算法
  • 加密密钥:用于加密算法进行加密操作的密钥,密钥分为对称密钥和非对称密钥
  • 解密密钥:用于解密算法进行解密操作的密钥,密钥分为对称密钥和非对称密钥
  • 密钥对:在非对称加密技术中,有两种密钥,分为私钥和公钥,私钥是密钥对所有者持有,不可公布,公钥是密钥对持有者公布给他人的。

2.加签、验签

  • 「加签」:用Hash函数把原始报文生成报文摘要,然后用私钥对这个摘要进行加密,就得到这个报文对应的数字签名。通常来说呢,请求方会把「数字签名和报文原文」一并发送给接收方。
  • 「验签」:接收方拿到原始报文和数字签名后,用「同一个Hash函数」从报文中生成摘要A。另外,用对方提供的公钥对数字签名进行解密,得到摘要B,对比A和B是否相同,就可以得知报文有没有被篡改过。
  • 比如A和B都有一套自己的公钥和私钥,当A要给B发送消息时,先用B的公钥对消息加密,再对加密的消息使用A的私钥加签名,达到既不泄露也不被篡改,更能保证消息的安全性。

3.私钥、公钥、证书

  • 私钥:解密、加签
  • 机构向银联发送报文时,使用机构私钥做签名,银联收到报文后,使用机构公钥验签。
  • 私钥:用来解密公钥加密的数据。
  • 公钥:加密、验签
  • 银联向机构发送报文时,使用银联私钥做签名,机构收到报文后,使用银联公钥验签。 
  • 公钥:公钥用来给数据加密,用公钥加密的数据只能使用私钥解密

  • 证书:包含 公钥、公钥的主体、证书签发机构(CA)。用来保证公钥就是公钥主体的,防止公钥伪造的问题。

4.根据证书获取证书序列号等相关代码

// 1、加载公钥文件-读取公钥串
	@Test
	public void loadPublicCert() {
		FileInputStream inputStream = null;
		try {
			inputStream = new FileInputStream("d:\\zhengshu\\1111.cer");
            CertificateFactory cff = CertificateFactory.getInstance("X.509","BC");
			X509Certificate publicCert = (X509Certificate) cff.generateCertificate(inputStream);
			System.out.println("证书序列号:" + publicCert.getSerialNumber().toString(16));
			System.out.println("证书DN:" + publicCert.getSubjectDN());
			System.out.println("证书有效日期(开始):" + publicCert.getNotBefore());
			System.out.println("证书有效日期(截止):" + publicCert.getNotAfter());
			System.out.println("公钥信息:" + Base64.toBase64String(publicCert.getEncoded()));
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (inputStream != null) {
				try {
					inputStream.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}

相关文章:

  • 分布式事务问题
  • 终于解决了悬疑好多年的低版本CAD VBA不能在高版本CAD使用的问题
  • SpringBoot 项目的创建与启动
  • 百科创建:7种有效的百科词条创建技巧
  • 天狗实战SpringBoot+Vue(二)项目结构搭建(上)
  • k8s容器集群工作负载节点跨越多个云计算厂商
  • 专题五:DFS深度优先搜索
  • 【计算机网络】从输入网址到网页显示,期间发生了什么?
  • ZMC408CE | 实现“8通道独立PSO”应用场景
  • pytorch中.data与.item(),.numpy(),.detach(),.cuda(),.cpu()的作用
  • 从参数数量视角理解深度学习神经网络算法 DNN, CNN, RNN, LSTM 以python为工具
  • 如何使用ChatGPT API 及 问题解决
  • Linux0.11 任务切换(七)
  • Lighttpd入门教程
  • 为什么汽车控制器应用层软件开发要采用AUTOSAR的架构接口
  • Apache Pulsar 2.1 重磅发布
  • django开发-定时任务的使用
  • ES6系统学习----从Apollo Client看解构赋值
  • iOS 颜色设置看我就够了
  • Java多态
  • java多线程
  • Laravel Telescope:优雅的应用调试工具
  • Map集合、散列表、红黑树介绍
  • Redis字符串类型内部编码剖析
  • vue--为什么data属性必须是一个函数
  • 对象引论
  • 如何使用 JavaScript 解析 URL
  • 如何选择开源的机器学习框架?
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 软件开发学习的5大技巧,你知道吗?
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 问题之ssh中Host key verification failed的解决
  • 学习ES6 变量的解构赋值
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • 你对linux中grep命令知道多少?
  • Nginx实现动静分离
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • ​第20课 在Android Native开发中加入新的C++类
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • (BFS)hdoj2377-Bus Pass
  • (C++17) std算法之执行策略 execution
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (强烈推荐)移动端音视频从零到上手(上)
  • (原創) X61用戶,小心你的上蓋!! (NB) (ThinkPad) (X61)
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • .NET 8.0 发布到 IIS
  • .NET CORE 3.1 集成JWT鉴权和授权2
  • .Net IE10 _doPostBack 未定义
  • .Net Remoting(分离服务程序实现) - Part.3
  • .NET 将多个程序集合并成单一程序集的 4+3 种方法
  • .net遍历html中全部的中文,ASP.NET中遍历页面的所有button控件
  • @converter 只能用mysql吗_python-MySQLConverter对象没有mysql-connector属性’...
  • @kafkalistener消费不到消息_消息队列对战之RabbitMq 大战 kafka