RSA加密、解密和签名、验签过程理解 (www.jianshu.com)

【简介】

这里将A理解为客户端,B理解为服务端,可以比较好理解.

加解密过程简述
A和B进行通信加密,B要先生成一对RSA密钥,B自己持有私钥,给A公钥 --->A使用B的公钥加密要发送的内容,然后B接收到密文后通过自己的私钥解密内容

签名验签过程简述
A给B发送消息,A先计算出消息的消息摘要,然后使用自己的私钥加密消息摘要,被加密的消息摘要就是签名.(A用自己的私钥给消息摘要加密成为签名)

B收到消息后,也会使用和A相同的方法提取消息摘要,然后用A的公钥解密签名,并与自己计算出来的消息摘要进行比较-->如果相同则说明消息是A发送给B的,同时,A也无法否认自己发送消息给B的事实.(B使用A的公钥解密签名文件的过程,叫做\"验签\").

数字签名的作用:保证数据完整性,机密性和发送方角色的不可抵赖性
加密与签字结合时,两套公私钥是不同的

对签名和验签过程详细理解:
签名过程:

1. A计算消息m的消息摘要,记为 h(m)
2. A使用私钥(n,d)对h(m)加密,生成签名s, s满足:s=(h(m))^d mod n;
由于A是用自己的私钥对消息摘要加密,所以只用使用s的公钥才能解密该消息摘要,这样A就不可否认自己发送了该消息给B
3. A发送消息和签名(m,s)给B
验签过程:

1. B计算消息m的消息摘要(计算方式和A相同),记为h(m)
2. B使用A的公钥(n,e)解密s,得到 H(m), H(m) = s^e mod n
3. B比较H(m)与h(m),相同才能证明验签成功

对加密/解密和签名/验签完整过程详细理解:
A->B:
1. A提取消息m的消息摘要h(m),并使用自己的私钥对摘要h(m)进行加密,生成签名s
2. A将签名s和消息m一起,使用B的公钥进行加密,生成密文c,发送给B

B:
1. B接收到密文c,使用自己的私钥解密c得到明文m和数字签名s
2. B使用A的公钥解密数字签名s解密得到H(m)
3. B使用相同的方法提取消息m的消息摘要h(m)
4. B比较两个消息摘要。相同则验证成功;不同则验证失败

点击查看全文 >>

@shengting 2018-07-31 17:06分享 / 0个评论
赞过的人: 技术头条
要不要再学学下面的文章?
记录一次Flink作业异常的排查过程 (club.perfma.com)
最近2周开始接手apache flink全链路监控数据的作业,包括指标统计,业务规则匹配等逻辑,计算结果实时写入elasticsearch. 昨天遇到生产环境有作业无法正常重启的问题,我负责对这个问题进行排查跟进。
by @PerfMa社区 2020-06-16 10:54 分享 查看详情
以深度学习为例理解22种设计模式(三)行为模式 (johnhany.net)
系列文章以深度学习的模型搭建和训练过程为例,解释面向对象编程中22种设计模式的基本原理,并给出C++实现。第三篇介绍行为模式,包括责任链、命令、迭代器、中介者、备忘录、观察者、状态、策略、模板方法以及访问者。
by @JohnHany 2020-06-08 13:04 分享 查看详情
以深度学习为例理解22种设计模式(二)结构型模式 (johnhany.net)
系列文章以深度学习的模型搭建和训练过程为例,解释面向对象编程中22种设计模式的基本原理,并给出C++实现。第二篇介绍结构型模式,包括适配器、桥接、组合、装饰、外观、享元以及代理。
by @JohnHany 2020-06-04 11:14 分享 查看详情
以深度学习为例理解22种设计模式(一)创建型模式 (johnhany.net)
以深度学习的模型搭建和训练过程为例,解释面向对象编程中22种设计模式的基本原理,并给出C++实现。第一篇介绍创建型模式,包括工厂方法、抽象工厂、生成器、原型以及单例。
by @JohnHany 2020-05-29 14:25 分享 查看详情
27 个为什么,帮助你更好的理解Python (mp.weixin.qq.com)
Guido van Rossum 认为使用缩进进行分组非常优雅,并且大大提高了普通 Python 程序的清晰度。大多数人在一段时间后就学会并喜欢上这个功能。
由于没有开始/结束括号,因此解析器感知的分组与人类读者之间不会存在分歧。偶尔 C 程序员会遇到像这样的代码片段:
by @code小生 2020-05-24 23:14 分享 查看详情
这款神器,能把 Python 代码执行过程看地一清二楚 (mp.weixin.qq.com)
对于一些刚入门 Python 的朋友来说,代码稍微复杂些就难以搞懂代码内部到底是怎么运行的了,而且有时一运行就报错,难以一下发现错误,只会用 Print 去慢慢找异常的地方,效率很低下。
by @code小生 2020-05-18 13:36 分享 查看详情
不可逆的类初始化过程 (club.perfma.com)
类的加载过程说复杂很复杂,说简单也简单,说复杂是因为细节很多,比如说今天要说的这个,可能很多人都不了解;说简单,大致都知道类加载有这么几个阶段,loaded->linked->initialized
by @PerfMa社区 2020-04-07 10:36 分享 查看详情
这款神器,能把 Python 代码执行过程看地一清二楚 (mp.weixin.qq.com)
对于一些刚入门 Python 的朋友来说,代码稍微复杂些就难以搞懂代码内部到底是怎么运行的了,而且有时一运行就报错,难以一下发现错误,只会用 Print 去慢慢找异常的地方,效率很低下。
by @code小生 2020-03-15 18:15 分享 查看详情
从 App 启动过程看 Android 10.0 Framework 重构 (mp.weixin.qq.com)
Android每个大版本都会对framework进行一定的重构,10.0也不例外。这次,谷歌把重构的对象瞄准了AMS。看过AMS代码的同学都知道,
by @code小生 2020-01-05 21:33 分享 查看详情
如何保障云上数据安全?一文详解云原生全链路加密 (yq.aliyun.com)
对于云上客户而言,其云上数据被妥善的安全保护是其最重要的安全需求,也是云上综合安全能力最具象的体现。本文作者将从云安全体系出发,到云数据安全,再到云原生安全体系对全链路加密进行一次梳理,从而回答:在云原生时代,全链路加密需要做什么?如何做到?以及未来要做什么?
by @可耐芊小仙女 2019-12-17 16:37 分享 查看详情