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

[转]公钥,私钥和数字签名这样最好理解

一、公钥加密
假设一下,我找了两个数字,一个是1,一个是2。我喜欢2这个数字,就保留起来,不告诉你们(私钥),然后我告诉大家,1是我的公钥。

我有一个文件,不能让别人看,我就用1加密了。别人找到了这个文件,但是他不知道2就是解密的私钥啊,所以他解不开,只有我可以用
数字2,就是我的私钥,来解密。这样我就可以保护数据了。

我的好朋友x用我的公钥1加密了字符a,加密后成了b,放在网上。别人偷到了这个文件,但是别人解不开,因为别人不知道2就是我的私钥,
只有我才能解密,解密后就得到a。这样,我们就可以传送加密的数据了。


 

二、私钥签名
如果我用私钥加密一段数据(当然只有我可以用私钥加密,因为只有我知道2是我的私钥),结果所有的人都看到我的内容了,因为他们都知
道我的公钥是1,那么这种加密有什么用处呢?

但是我的好朋友x说有人冒充我给他发信。怎么办呢?我把我要发的信,内容是c,用我的私钥2,加密,加密后的内容是d,发给x,再告诉他
解密看是不是c。他用我的公钥1解密,发现果然是c。
这个时候,他会想到,能够用我的公钥解密的数据,必然是用我的私钥加的密。只有我知道我得私钥,因此他就可以确认确实是我发的东西。
这样我们就能确认发送方身份了。这个过程叫做数字签名。当然具体的过程要稍微复杂一些。用私钥来加密数据,用途就是数字签名

 

总结:公钥和私钥是成对的,它们互相解密。

公钥加密,私钥解密。

私钥数字签名,公钥验证。

 

举例

比如有两个用户Alice和Bob,Alice想把一段明文通过双钥加密的技术发送给Bob,Bob有一对公钥和私钥,那么加密解密的过程如下:

  1. Bob将他的公开密钥传送给Alice。
  2. Alice用Bob的公开密钥加密她的消息,然后传送给Bob。
  3. Bob用他的私人密钥解密Alice的消息。

  上面的过程可以用下图表示,Alice使用Bob的公钥进行加密,Bob用自己的私钥进行解密。

例子和图出自《网络安全基础 应用与标准第二版》

 

RSA算法

RSA 公钥加密算法是1977年由Ron Rivest、Adi Shamirh和LenAdleman在(美国麻省理工学院)开发的。RSA取名来自开发他们三者的名字。RSA是目前最有影响力的公钥加密算法,它能够 抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对 其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。

原文:http://blog.csdn.net/21aspnet/article/details/7249401#

相关文章:

  • 利用国内的源安装 Python第三方库
  • .net反编译的九款神器
  • Spring Cloud Config
  • HADOOP单机系统安装
  • ASCLL
  • 关于mybatis的学习笔记
  • qt-4.8.4安装和环境变量配置
  • Cacti和Nagios整合
  • linux 运维shell习题
  • iOS Xcode 打包之后,不能输出日志
  • 我们每个人其实都有周杰伦的“影子”
  • 删除heroku上的数据库记录
  • 哈尔滨铁路千余列车加装无线WIFI网络
  • Redis操作命令总结
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • 【剑指offer】让抽象问题具体化
  • exports和module.exports
  • gcc介绍及安装
  • js中forEach回调同异步问题
  • Mysql优化
  • use Google search engine
  • V4L2视频输入框架概述
  • 从零开始在ubuntu上搭建node开发环境
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 电商搜索引擎的架构设计和性能优化
  • 给新手的新浪微博 SDK 集成教程【一】
  • 如何设计一个微型分布式架构?
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 微服务框架lagom
  • 写给高年级小学生看的《Bash 指南》
  • 一道闭包题引发的思考
  • 转载:[译] 内容加速黑科技趣谈
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • k8s使用glusterfs实现动态持久化存储
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • #include到底该写在哪
  • #NOIP 2014#Day.2 T3 解方程
  • (1)SpringCloud 整合Python
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (一)认识微服务
  • (转)socket Aio demo
  • (转)winform之ListView
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .NET Micro Framework 4.2 beta 源码探析
  • .NET 中各种混淆(Obfuscation)的含义、原理、实际效果和不同级别的差异(使用 SmartAssembly)
  • .net程序集学习心得
  • .net的socket示例