几个例子理解对称加密与非对称加密、公钥与私钥、签名与验签、数字证书、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 ...
随机推荐
- POJ1273:Drainage Ditches——题解
http://poj.org/problem?id=1273 题目大意: n点m边网络流,求1-n最大流. —————————————— 网络流板子,切了. #include <cstdio&g ...
- YBT 2.4 AC自动机
其实这个专题NOIP几乎不考 AC自动机,就是能让题自动AC的东西,是不是十分神奇 对的,就是这么神奇 AC自动机是解决多模式串与文本串匹配的问题 是KMP+Trie树的结合,也是一个毒瘤算法 Key ...
- IntelliJ IDEA 详细图解最常用的配置 ,适合新人,解决eclipse转idea的烦恼
刚刚使用IntelliJ IDEA 编辑器的时候,会有很多设置,会方便以后的开发,磨刀不误砍柴工. 比如:设置文件字体大小,代码自动完成提示,版本管理,本地代码历史,自动导入包,修改注释,修改tab的 ...
- 图片上传(方法一:jquery.upload.js)
一.在JSP页面引入jquery.upload.js 文件: <script type="text/javascript" src="${ctx}/script/j ...
- HDU2819:Swap(二分图匹配)
Swap Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- TCP的连接(三次握手)和释放(四次挥手)
1 http都设置哪些header? http协议规定:一个完整的客户端发送给服务端的HTTP请求包括: (1)请求行:包括了请求方法.请求资源路径.HTTP协议版本,eg:GET/Server/im ...
- HDU1540 区间合并
Tunnel Warfare Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...
- git 回退
回退命令: $ git reset --hard HEAD^ 回退到上个版本$ git reset --hard HEAD~3 回退到前3次提交之前,以此类推,回退到n次提交之前 $ git rese ...
- 分析一个贴图社交app的失败原因:FORK(相机)
FORK(相机)是一个通过分享图片来建立社交的app,它有着鲜明的配色,还算不错的贴图创新,细腻的产品设计,但是由于产品定位不清晰.设计亮点不多以及推广不利,从2014年5月第一版开始就没有火过.所以 ...
- 南阳ACM 题目275:队花的烦恼一 Java版
队花的烦恼一 时间限制:3000 ms | 内存限制:65535 KB 难度:1 描述 ACM队的队花C小+经常抱怨:"C语言中的格式输出中有十六.十.八进制输出,然而却没有二进制输出, ...