几个例子理解对称加密与非对称加密、公钥与私钥、签名与验签、数字证书、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 ...
随机推荐
- SAPI 包含sphelper.h编译错误解决方案
原文连接地址:http://blog.csdn.net/believenow_notfuture/article/details/52191229 [转]SAPI 包含sphelper.h编译错误解决 ...
- 【状压DP】【UVA11825】 Hackers' Crackdown
传送门 Description 你是一个hacker,侵入了一个有着n台计算机(编号为1.2.3....n)的网络.一共有n种服务,每台计算机都运行着所有服务.对于每台计算机,你都可以选择一项服务,终 ...
- Linux之根文件系统介绍与分析20160611
说一下LINUX根文件系统的介绍与分析: 1.内核启动应用程序,首先要识别出应用程序,这时就需要文件系统来帮助内核找到对应的应用程序: 2.第一个启动的应用程序就是sbin目录下的init程序,也就是 ...
- swift4.0闭包
http://blog.csdn.net/bddzzw/article/details/78276054
- 清除windows系统垃圾文件简易脚本(bat)
@echo off echo 正在清除系统垃圾文件,请稍等...... del /f /s /q %systemdrive%\*.tmp del /f /s /q %sy ...
- SpringMVC+MyBatis 返回时间格式转换的解决方案
Spring MVC 4.X ResponseBody 日期类型Json 处理 摘自http://tramp-zzy.iteye.com/blog/2090330 2014-07-10 方法一:全局 ...
- Spring structs2 hibernate 整合(ssh)
ssh项目jar包 项目内容: 1. 加入 Spring 1). 加入 jar 包2). 配置 web.xml 文件3). 加入 Spring 的配置文件.(application.xml) 2. 加 ...
- 【模版】多项式乘法 FFT
https://www.luogu.org/problem/show?pid=3803 题目背景 这是一道模版题 题目描述 给定一个n次多项式F(x),和一个m次多项式G(x). 请求出F(x)和G( ...
- Flume 入门--几种不同的Sinks
主要介绍几种常见Flume的Sink--汇聚点 1.Logger Sink 记录INFO级别的日志,一般用于调试.前面介绍Source时候用到的Sink都是这个类型的Sink 必须配置的属性: 属性说 ...
- c版http服务器 shttpd-1.38 vs2013
有个项目,本来是外网的.要做一个局域网版本. 项目启动就获取一大堆http的数据.考虑到可以提供http服务的软件虽然多,但是多要安装这样那样的软件,还要配置环境或者配置资源等问题. 发布的时候给人一 ...