小明给小红传了张纸条
来源:互联网 发布:大数据与网络安全 编辑:程序博客网 时间:2024/04/28 05:48
需求是这样的,小明要跟小红传个纸条,但是纸条里的信息比较机密,不想让别人看见,在传递过程中也不能被篡改
要完成这个过程,我们先要知道几个大概的点
RSA加密算法,中文名叫非对称加密算法,原理大概就是通信方有两个钥匙,一个是公钥一个是私钥,私钥是保密的只有自己知道,公钥是公开的谁都可以得到,最关键的点是,公钥加密的东西私钥可以解密,说白了就是我把信息所在一个盒子里面,用公钥把盒子锁上了,拿到我这个盒子的人如果持有我的公钥,那么他用这把钥匙可以打开这个盒子获得信息,至于RSA加密的实现原理,文章后面有介绍。
首先,看上面的图,一开始是明文,什么是明文?废话,小明写的肯定叫明文啊,首先将明文通过散列算法来加密,其实这里叫加密不是很合适,md5这些只是散列算法,算不上加密,只需要知道经过md5加密过的东西是回不去的,这个过程是不可逆的,经过散列后的东西叫信息摘要,下一步我们通过RSA来加密,用小明的私钥来加密生成的东西叫做数字签名,有人也许会问为什么不直接对明文进行RSA加密呢,原因是因为非对称加密的效率相对于对称加密来说要差,明文很长的话可能会影响效率,这个后面RSA的原理会讲
接着,小明开始整理要发送的东西,首先我们先想下需要发送的东西有哪些,上面加密完的数字签名肯定要发送,小明的公钥也要发送,因为要用它来解密数字签名,等下为什么要发送明文?原因很简单,数字签名解密后的是信息摘要,而信息摘要到明文这一步是不可逆的,所以你不发送明文的话,鬼知道小明到底发的是什么,因为小红不是鬼,所以发送的时候需要发送明文,所以我们确定下来,需要发送的是上图左边的那三项;
当然那三项肯定不能就这样暴漏着发出去,不然狗仔偷窥怎么办,如上图所示,我们将上面的三个信息打包起来用一把对称密钥来加密,对称加密的意思很好理解,就是信息通过一把钥匙加密起来,也需要同样一把钥匙来进行解密,解密后信息被还原。
既然是对称加密,解密的钥匙就一把,小明用的这把秘钥也得发给小红才行,不然你让小红撬开吗?当然这把对称秘钥肯定不是明文发出去,不然还加密毛线,如何发呢?见下图:
从图上可以看出来,我们用小红的公钥对刚才的那把对称密钥进行RSA加密,小明怎么会有小红的公钥,他俩同居了吗?上面已经说了,公钥是公开的,所以跟小红打过交道的人都可以有小红的公钥;
加密完的东西叫做数字信封,小明真正发给小红的是上图中右边的东西,包含密文和数字信封两部分。
经过层层传递后,纸条终于传到小红这边了,小红瞥了一眼道:死鬼,又发些什么肉麻东西,然后开始拆纸条,过程如下图:
首先我们的小红用自己的私钥先将数字信封进行解密,解密完了之后拿到一把对称秘钥,然后小红用这把对称秘钥对密文进行解密,解密完了之后还原出数字签名、明文、小明的公钥这三样东西,此时此刻小红已经可以看见小明发的明文了,但是如何确认一下信息有没有被篡改过呢?小红嘴里喃喃道:死鬼,整这么机密,然后继续拆,如下图:
小红用小明的公钥将数字签名进行解密,解密得到信息摘要,通过信息摘要是回不去的,所以只能将现有明文通过实现约定好的散列算法进行hash,同样得到信息摘要,然后将这两个信息摘要进行比对,如果信息摘要相同那么就没问题了,如果信息摘要比对起来不相等,那么说明消息在中间传送的过程中被篡改过。
RSA的详解可以看下这个链接:
http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html
- 小明给小红传了张纸条
- 小纸条
- 淘宝小铺开张了
- 项目问题小纸条
- 小纸条技术支持
- 单身小纸条
- [转载]张磊为什么把钱给了耶鲁
- 小明和小强都是张老师的学生,张老师的生日是M月N日,2人都知道张老师的生日 是下列10组中的一天,张老师把M值告诉了小明,把N值告诉了小强,张老师问他们知道他的生日是那一天吗?
- Python学习中的小纸条
- Python入门的36个例子之16: 关键参数 —— 嘿!请把这个纸条给小强
- 关于小程序,张小龙回答了这十个问题
- 上周自行车丢了,报案了,警察局给了张纸,还一直没打电话催
- 张宇《给你们》
- 代码给张先生
- 小纸条功能相关资料转贴
- 2738——小纸条(不确定)
- 小明和小强都是张老师的学生
- 小明和小强都是张老师的学生,张老…
- Mac SVNX 红色文件夹
- RTC实时时钟驱动
- DirectX 学习一:环境的配置
- 计算机中数的表示与大小端法
- linux下测试RTC驱动相关的命令date和hwclock常见用法简介
- 小明给小红传了张纸条
- linux 的date命令及系统时间设置
- hwclock: RTC_SET_TIME: Invalid argument
- C++输出控制--小数位数的两种方法
- C++标准库vector类型
- Hadoop框架介绍
- 我的大学四年和对学弟的一些建议(一)
- 女孩学IT优势多
- 【DP】HDU 1267 下沙的沙子有几粒?