对称加密,非对称加密详解
在使用一些软件或者是系统的时候,我们常常听到或者看到“公钥”,“私钥”这两个词,比如,我们在使用git的时候,常常要去先使用git生成自己的公钥和私钥,然后将公钥提交到搭建了git的云代码管理网站上去进行协作开发,那么这个公钥私钥究竟是个什么鬼?
一、对称加密解密方式
我们的数据传输对称加密是如下这个样子的:
例如,现在A方要将一段数据发送给B方:
如果不加密的话,直接用明文传输,很可能在传输的过程中被恶意的第三方拦截到,轻则是B方接收不到数据,重则恶意的第三方篡改数据,让B方接收到错误的数据,使得A、B双方蒙受损失:
于是我们要在A方进行数据加密,并且要在B方进行解密操作让B方得到数据,那么就需要加密解密的规则,这个规则被我们称为“钥匙”,如图:
但是这种加密方式会出现一个问题,就是在发送的途中,钥匙和数据一起被坏人窃取了,坏人可能破坏数据和钥匙让B方接收不到,也可能使用钥匙解密了数据,然后篡改了数据,再把钥匙原路发给B方,让B方在察觉不到的情况下接收了错误的数据。
为了解决这个问题,权宜之计是对钥匙加密,也就是用一把钥匙去解密另一把钥匙,然后再用解密出来的钥匙解密获取数据。可是坏人要是想解密依然是可以的,只不过麻烦一点,要一层一层地用钥匙解密,不过破解的难度还是不高的。针对这种问题,美国密码学家惠特菲尔德·迪菲和马丁·赫尔曼合作发明了“迪菲-赫尔曼”加密算法,此算法针对性地解决了对称加密中钥匙的安全性问题。
二、非对称加密
针对传统加密方式的弊端,我们想出了新的对策,就是非对称加密,非对称加密是一种使用不同钥匙加密解密的方法,原理是这样的:
- 接收方B方先创建一对钥匙,包括一个加密钥匙,一个解密钥匙,也就分别对应我们刚才说的公钥和私钥
- A方使用加密钥匙对数据进行加密
- A方将密文发送给B方
- B方使用自己的解密钥匙进行解密
通过这样的方式进行加密之后,坏人即使拦截了A方发送的数据,但是因为没有解密钥匙的缘故,也无法进行解密
同时,使用非对称加密还有一个好处,就是方便进行多方的数据传输———因为B方发布的加密钥匙也就是公钥只被用来加密,因此即使被很多人掌握那么对B方来说也是安全的,那么,B方就可以把同一把加密钥匙公开给多个人,然后多个人就可以一起给B方发数据,而不用为每个人分别准备一把公钥。
但是,非对称加密存在两个问题
速度慢
非对称加密的速度比较慢,因为它采用的算法强度比较高,因此不适合用来传输少量数据,不值得为少量数据浪费性能,完全可以采用别的加密方式,或者使用混合加密方式来加密,点此查看混合加密非对称加密是否可靠
从前面的讲解来看,非对称加密是一种比较安全的方式,安全的地方在于没有对应的钥匙几乎不可能破解加密后的数据,但是,非对称加密的问题往往是出现在交付钥匙的过程上,我们来看下面一种情况:
–>B方创建公钥私钥并将公钥交给A方
–>坏人拦截了公钥,自己创建了一对公钥私钥,这里称为“坏公钥”和“坏私钥”
–>将公钥替换为自己创建的“坏公钥”
–>将“坏公钥”提供给了A方
–>A方使用了坏公钥加密数据,发送回B方
–>在发送的途中被刚才的相同坏人拦截
–>坏人使用自己的坏私钥解密了A方使用坏私钥加密的数据
–>坏人偷看A方发送的数据,或者干脆篡改了A发送的数据
–>坏人使用B方的公钥加密已经被偷看或者被篡改的数据
–>将数据发回给B方
–>B方发现自己依然可以用自己的私钥解密,因此会认为自己的数据还是安全的,根本不知道数据已经被人窃取或篡改了
图示如下:
这种方式称为“中间人攻击”,我们发现,这种攻击方式的问题根源是A方无法确定自己的公钥是否是B方发送的,因此,为了防范这种攻击,我们使用了数字证书,在另一篇博客会提到。
对称加密,非对称加密详解相关推荐
- 网络知识详解之:HTTPS通信原理剖析(对称、非对称加密、数字签名、数字证书)
网络知识详解之:HTTPS通信原理剖析(对称.非对称加密.数字签名.数字证书) 计算机网络相关知识体系详解 网络知识详解之:TCP连接原理详解 网络知识详解之:HTTP协议基础 网络知识详解之:HTT ...
- 加密、解密详解及CA的实现
加密.解密详解及CA的实现 推荐 转载nmshuishui的文章,文章链接 http://blog.51cto.com/nmshuishui/1370917?utm_source=tuicool&am ...
- JavaScript实现加密与解密详解
这篇文章介绍了Java脚本语言实现加密与解密详解的方法,文中通过示例代码介绍的非常详细.对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 目前原生射流研究-貌似并没有提供讯息摘要5计算相 ...
- 隐私计算加密技术基础系列(下)对称与非对称加密的应用场景
本章是<隐私计算加密技术基础>系列文章的最后一篇,感慨下,终于写完了,这个春节假期除了陪家人就是写着三篇文章了.其实写之前并没有觉得是多么难的事情,感觉这些原理自己都比较清楚,但是随着写的 ...
- ios php rsa加密解密,php rsa加密解密使用详解
第一条命令生成原始 RSA私钥文件 rsa_private_key.pem,第二条命令将原始 RSA私钥转换为 pkcs8格式,第三条生成RSA公钥 rsa_public_key.pem 从上面看出通 ...
- python 录制web视频_Python django框架 web端视频加密的实例详解
视频加密流程图: 后端获取保利威的视频播放授权token,提供接口api给前端 参考文档:http://dev.polyv.net/2019/videoproduct/v-api/v-api-play ...
- C#实现RSA加密和解密详解
C#实现RSA加密和解密详解 原文:C#实现RSA加密和解密详解 RSA加密解密源码: using System; using System.Collections.Generic; using Sy ...
- Linux系统安全概述-sudo授权-pam认证机制-对称加密-非对称加密-md5-数字证书
内容: 17.1 Linux系统安全概述-su-sudo授权 17.2 pam认证机制概述 17.3 对称加密-非对称加密方法 17.4 md5-sha1-哈希算法使用方法 17.5 CA证书的作用 ...
- Linux加密和安全篇(一)gpg、对称和非对称加密、哈希算法
对于linux运维工作者而言,加密技术已经很早就用于数据的存储和数据之间的交换.我们可以会为了防止你的网站.服务器或者系统,我们会使用一些手段来防止一些恶意的攻击或者访问.一下就对linux的安全和加 ...
- HTTPS(对称加密+非对称加密+证书)
目录 1. 加密和解密 HTTPS工作过程 2. 对称加密 3. 对称加密 4. 既然都有非对称加密了,那为啥还要有对称加密 5. 中间人攻击 6. 引入证书 HTTPS 也是一个应用层协议. 是在 ...
最新文章
- 基于图像的三维模型重建——稠密点云重建
- AAAI 2020 论文接收结果出炉,得分 997 论文被拒,388 反而中了?
- python 字符串去除中文
- 最全BAT前端开发面试80题:算法+html+js+css!含答案大赠送!
- python多线程文件的数据续传_python实现支持并发、断点续传的Ftp程序
- python命令符bash_从python结构执行远程bash命令时“转义”$
- 回家_洛谷U3427_dfsbfs
- foreach()与list()的综合应用,用list给嵌套的数组解包
- Prime Path素数筛与BFS动态规划
- 2017年最值得关注的5大产品设计趋势
- 估计理论(5):BLUE的定义(6.3)
- fastJson、Jackson对象转json串不使用驼峰方法和json转对象
- python基础语法学习一
- 首发的400G园区核心交换机,开启园区超宽时代
- hpgs2wnd.exe
- c语言猜拳游戏石头剪刀布,模拟剪刀石头布猜拳游戏
- 小学英语计算机问卷调查,《小学英语单词记忆方法研究》问卷调查分析报告
- 【Leetcode】644. Maximum Average Subarray II
- 利用有道翻译Api实现英文翻译功能
- 基于51单片机蜂鸣器的音乐播放器设计C
热门文章
- python中pprint模块
- 软件外包公司的优缺点
- matlab中的向量除法
- android 涨潮动画加载_潮汐app怎么使用?潮汐app各功能测评介绍
- []==[]和[]==![]
- Android混淆大法
- HTTP ---code错误状态码大全
- 带阻滤波器对周期性噪声消除matlab实现
- js几种escape()解码与unescape()编码
- Jquery实现textarea自动换行