几个例子理解对称加密与非对称加密、公钥与私钥、签名与验签、数字证书、HTTPS加密方式
# 原创,转载请留言联系
为什么会出现这么多加密啊,公钥私钥啊,签名啊这些东西呢?说到底还是保证双方通信的安全性与完整性。例如小明发一封表白邮件给小红,他总不希望给别人看见吧。而各种各样的技术就是为了保障通信的安全。(本文务必从上到下看)
1.对称加密与非对称加密
对称加密:
对称加密是最快速的一种加密方式。加密和解密用的是同样的密钥。
对称加密是怎么实现的呢?举个例子说明。
小明写了一封信给小红。他用箱子装着信,同时箱子上锁,他去快递店把这个箱子和开启箱子的钥匙一起快递给小红。小红收到箱子后,用钥匙打开箱子,看信。这就是对称加密的传输过程。
但是为什么现在很少用这种方式进行。万一你的快递中途丢了(在传输过程中可以数据认为被黑客截获),那么拿到你快递的人,也可以用快递里的钥匙打开这个箱子,所以信息就泄露了。并且更严重的是,别人可以把你的信取出来,写一封诈骗的信,再寄给小红,那么小红就受骗啦。所以对称加密并不安全。
非对称加密
非对称加密就比较特殊了。非对称加密存在着公钥和私钥,公钥是用来加密内容的,私钥是用来解密内容的。
比如小明有几个朋友,小A、小B、小C。小明和这几个朋友平时有秘密交流。小明自己拿着私钥,然后给每一个朋友一把公钥。
朋友写信给小明时:比如小A有机密信息要告诉小明。他写了一封信,用小明给他的公钥加密,这时候这封信是加密的,谁都看不到的,谁都不能解密,只有小明的私钥可以。所以在传输过程中就不怕被别人篡改了。记住,公钥是拿来加密的,小A拿着的是公钥。私钥是解密的,小明拿着的是私钥。这里附上一个比较容易记的方法。当你收信的时候,你肯定不想信给别人看过,这是私人的东西,所以收信方用的是私钥。
那么问题来了......当小明想发信给小A的时候应该怎么办呢?
其实,小A也有自己的私钥,他也把自己的公钥发给小明呀。
小明持有的钥匙:小明的私钥,小A的公钥,小B的公钥,小C的公钥...
小A持有的钥匙:小A的私钥,小明的公钥,小B的公钥,小C的公钥...
小B持有的钥匙:小B的私钥,小明的公钥,小A的公钥,小C的公钥...
小C持有的钥匙:小C的私钥,小明的公钥,小A的公钥,小B的公钥...
看起来对称加密是很完美,但是他也有缺点,那就是他的加密速度十分的慢,一般只用来加密一些很短的数据,如果数据过长,他的加密速度比对称加密慢十几倍甚至上百倍。
2.签名与验签
签名与验证是什么呢?
签名与验证是基于公钥和私钥的。
签名与验签的理解
小明想快递一封信给小红,小明是一个很随和的人,别人看了他的信的内容都无所谓,但是一定不能修改!小明为了让小红完整的读到他的信,他用私钥对信进行了签名。小红收到信之后,用小明给她的公钥进行了验签。如果验签通过,则表明小明的信没有被修改过,全部内容都是小明写的。
注意,私钥是用来签名的。公钥是用来验签的。
3.HTTPS的原理
在说数字证书之前,最好先理解一下HTTPS的原理。
如果你认真地看完上面的文字,你现在应该知道对称加密比较快,但是不安全。非对称加密比较慢,但是比较安全。当然是越快越好对不,那么怎么解决对称加密的不安全性呢?可以利用非对称加密的方式,给对称加密的钥匙加密,然后传输给客户端,这不就解决对称密钥的不安全性了吗?所以,在HTTPS中,对称加密与非对称加密都有用到的!
例如,小明第一次浏览GOOGLE。这时候GOOGLE应该要把对称加密的钥匙发给小明呀,以后小明才能传输一些加密的信息给GOOGLE,而且加密也快。那么怎么保证这把钥匙的安全传输呢?这就要用到非对称加密了。GOOGLE先把公钥传输给小明。然后用自己的私钥加密对称加密的钥匙。再传输给小明。小明收到后,就可以用GOOGLE的公钥解开得到对称加密的钥匙啦。到了这步,就能保证对称加密的钥匙的安全啦。(这里有误,修正于2018.12.10:)小明用GOOGLE的公钥加密对称加密的钥匙,再传输给GOOGLE服务器。GOOGLE服务器收到后,就可以用私钥解开的到对称加密的钥匙啦。到了这步,就能保证对称加密的钥匙的安全传输啦。
自此之后,小明要搜什么内容,就先用对称加密的钥匙把内容加密,然后传输给GOOGLE。GOOGLE拿到后,用对称加密钥匙解密,并且处理完之后,用对称加密的钥匙加密,再发回去给小明。小明收到再解密......
看起来已经天衣无缝了,但是还是有问题。
万一小明刚开始收到的公钥不是GOOGLE的公钥呢?而是黑客发过去的公钥,那么小明本来想与GOOGLE交流的,不就变成与黑客交流了?
为了解决这个问题,数字证书出现了!~~
4.数字证书
上面的问题出现后,出现了解决方案。下面接着上面的例子讲:
GOOGLE可以使用由数字证书认证机构(CA,certificate Authority)和其他相关机关颁发的公开密钥证书。然后给小明发公钥时,小明就可以知道这个肯定是GOOGLE的公钥了。
详细过程是这样的:
1.GOOGLE服务器把自己的公钥登录至数字证书认证机构。
2.数字证书机构用自己的私钥对GOOGLE的公钥进行签名(还记得签名的作用?不记得看回去),并颁发公钥证书(证明的作用)。
3.要知道的一点是:每个人的浏览器都事先植入数字证书机构的公钥的!!!小明的也是,你的也是,我的也是。
4.小明收到了(公钥证书+GOOGLE的公钥)后,发现有公钥证书耶,然后用自己浏览器的数字证书机构的公钥对GOOGLE的公钥进行验签!如果验签成功,则代表GOOGLE的公钥是没有修改过的,可以放心食用。后面的过程不用说了吧,和上面例子的一样。
几个例子理解对称加密与非对称加密、公钥与私钥、签名与验签、数字证书、HTTPS加密方式的更多相关文章
- 理解 HTTPS 工作原理(公钥、私钥、签名、数字证书、加密、认证)(转)
本文摘录参考: 细说 CA 和证书(主要讲解 CA 的使用) 数字签名是什么?(简单理解原理) 深入浅出 HTTPS 工作原理(深入理解原理) HTTP 协议由于是明文传送,所以存在三大风险: 1.被 ...
- PHP通过OpenSSL生成证书、密钥并且加密解密数据,以及公钥,私钥和数字签名的理解
一.公钥加密假设一下,我找了两个数字,一个是1,一个是2.我喜欢2这个数字,就保留起来,不告诉你们(私钥),然后我告诉大家,1是我的公钥. 我有一个文件,不能让别人看,我就用1加密了.别人找到了这个文 ...
- 密码基础知识(2)以RSA为例说明加密、解密、签名、验签
密码基础知识(1)https://www.cnblogs.com/xdyixia/p/11528572.html 一.RSA加密简介 RSA加密是一种非对称加密.是由一对密钥来进行加解密的过程,分别称 ...
- php rsa 加密、解密、签名、验签
由于对接第三方机构使用的是Java版本的rsa加解密方法,所有刚开始在网上搜到很多PHP版本的rsa加解密,但是对接java大多都不适用. 以下php版本是适用于对接java接口,java适用密钥再p ...
- PHP SHA1withRSA加密生成签名及验签
最近公司对接XX第三方支付平台的代付业务,由于对方公司只有JAVA的demo,所以只能根据文档自己整合PHP的签名加密,网上找过几个方法,踩到各种各样的坑,还好最后算是搞定了,话不多说,代码分享出来. ...
- 对称(DES/AES)与非对称(RSA/SSL/数字证书)加密介绍及实际应用
本文不对具体的算法做深入研究,只是讲解各种安全算法的原理和使用场景. 一.数据校验算法 数据校验,是为保护数据的完整性,用一种指定的算法对原始数据计算出的一个校验值.当接收方用同样的算法再算一次校验值 ...
- RSA加密、解密、签名、验签的原理及方法
一.RSA加密简介 RSA加密是一种非对称加密.可以在不直接传递密钥的情况下,完成解密.这能够确保信息的安全性,避免了直接传递密钥所造成的被破解的风险.是由一对密钥来进行加解密的过程,分别称为公钥和私 ...
- Java & PHP RSA 互通密钥、签名、验签、加密、解密
RSA加密算法是一种非对称加密算法.在公开密钥加密和电子商业中RSA被广泛使用.RSA是1977年由罗纳德·李维斯特(Ron Rivest).阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Le ...
- php中rsa加密及解密和签名及验签
加密的内容长度限制为密钥长度少位,如位的密钥最多加密的内容为个长度. 公钥加密 $public_content=file_get_contents(公钥路径); $public_key=openssl ...
随机推荐
- POJ3261:Milk Patterns——题解
http://poj.org/problem?id=3261 给一个序列,求至少出现 k 次的最长重复子串,这 k 个子串可以重叠. 论文题+傻逼题. 上一道题(POJ1743)会做即可. 还是二分长 ...
- Shell编程语法
创建shell程序的步骤: 第一步:创建一个脚本文件.sh. 第二步:授予权限使它可以执行chmod u+x .sh 第三步:执行 ./example 或者 sh example 脚本调试: ...
- [BZOJ1131/POI2008]Sta树的深度
Description 给出一个N个点的树,找出一个点来,以这个点为根的树时,所有点的深度之和最大 Input 给出一个数字N,代表有N个点.N<=1000000 下面N-1条边. Output ...
- [ZJOI2010]排列计数 (组合计数/dp)
[ZJOI2010]排列计数 题目描述 称一个1,2,...,N的排列P1,P2...,Pn是Magic的,当且仅当2<=i<=N时,Pi>Pi/2. 计算1,2,...N的排列中有 ...
- idea一些文件如.xml 文件搜索不到的解决方法
- C++智能指针 unique_ptr
C++智能指针 unique_ptr unique_ptr 独占所指向的对象, 同一时刻只能有一个 unique_ptr 指向给定对象(通过禁止拷贝语义, 只有移动语义来实现), 定义于 memory ...
- bzoj [POI2005]Kos-Dicing 二分+网络流
[POI2005]Kos-Dicing Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1835 Solved: 661[Submit][Status][ ...
- c# 折半查找法实现代码
] { , , , , , , , , , , , , , , , , , , , }; , i; string j, k; , ); ) { k = String.Format("未找到{ ...
- 2017-2018-2 20179207 《网络攻防技术》python简明教程(1-10)
Python3简明教程(一) 开始python之旅 使用交互模式的 Python3解释器 简单使用 vim 编写 Python3 脚本 执行 Python3 脚本 Python3 代码风格建议 Pyt ...
- LightOJ 1137 - Expanding Rods 基础计算几何
http://www.lightoj.com/volume_showproblem.php?problem=1137 题意:一根长度为L的杆热膨胀为L',左端点到右端点间距离不变,且膨胀后的杆的弧为圆 ...