zoukankan      html  css  js  c++  java
  • 几个例子理解对称加密与非对称加密、公钥与私钥、签名与验签、数字证书、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的公钥是没有修改过的,可以放心食用。后面的过程不用说了吧,和上面例子的一样。

  • 相关阅读:
    CSS3—— 2D转换 3D转换 过渡 动画
    CSS3——边框 圆角 背景 渐变 文本效果
    CSS3——表单 计数器 网页布局 应用实例
    CSS3——提示工具 图片廓 图像透明 图像拼接技术 媒体类型 属性选择器
    CSS3——对齐 组合选择符 伪类 伪元素 导航栏 下拉菜单
    CSS3——分组和嵌套 尺寸 display显示 position定位 overflow float浮动
    CSS3——盒子模型 border(边框) 轮廓(outline)属性 margin外边距 padding填充
    Eclipse连接数据库报错Local variable passwd defined in an enclosing scope must be final or effectively final
    数据库——单表查询
    数据库——添加,修改,删除
  • 原文地址:https://www.cnblogs.com/chichung/p/10067336.html
Copyright © 2011-2022 走看看