导言
“ XXX,参数用aes加密一下 ” 后端如是说。
“ 好的 ” 表面很淡定,心里却一紧,aes是个什么鬼,怎么加密呢,百度走起。
每次听到加密、解密、数字签名,md5,aes,base64等名词,都是似曾相识,又朦朦胧胧,这次决定对这些知识系统学习并整理一下,免得每次遇到相关需求都很被动。
1. base64
1.1 介绍
有时候会把base64也误认为一种加密算法,但其实它只是一种编码方式。Base64是一种基于64个可打印字符来表示二进制数据的表示方法,主要是用于解决非英文传输乱码以及不可见字符传输的问题。
- base64编码:把二进制数据转为字符
- base64解码:把字符转为二进制数据
1.2 原理
原理参考该篇文章,讲的浅显易懂:blog.csdn.net/wo541075754…
1.3 工具
- 支持npm和script引入的库:github.com/beatgammit/…
- js内置的base64编码(window.btoa)和解码(window.atob):支持ie10+和其他浏览器
2. 加密解密
加密是将明文转为密文的过程,解密是将密文转为明文的过程,加密解密主要用于解决网络传输中的窃听问题。通过将明文加密,别人即使窃听到了你的数据,也无法读懂其中的含义。
在现代密码时期,加密算法是公开的,加密的安全性主要依赖于密钥。根据加密解密密钥是否相同,分为对称加密和非对称加密。
2.1 对称加密
加密和解密使用相同的密钥,通信时需要将密钥发送至对方,密钥容易被黑客截获,安全性不高,但是该种方式加密速度快。
- 常见的有AES、DES算法,其中AES是最常用的对称加密算法
2.2 非对称加密
又叫公开密钥加密,加密和解密使用不同的密钥,分别是公钥和私钥。公钥可公开传输,私钥是自己拥有的。
使用方式是公钥加密,私钥解密;反之,私钥加密,公钥解密。
非对称加密的特点是安全性高,但是加密速度慢。
- 常见的有RSA、DH算法,其中RSA是最常用的非对称加密算法
2.3 混合加密
对称加密安全性低,加密速度快;非对称加密安全性高,加密速度慢,不适合大数据加密。实际使用中往往结合对称加密和非对称加密,使用混合加密。
对称加密的不安全性体现在密钥在传输过程中容易被截获,那么就先使用非对称加密加密对称加密的密钥,之后的业务数据使用对称加密。
https就使用该种加密方式,可参考:juejin.cn/post/684490…
2.4 工具
- jsencrypt.js:用于RSA加密
github地址:github.com/travist/jse… - crypto-js:包括常用的AES,RSA,SHA和MD5等算法
github地址:github.com/brix/crypto…
3. 摘要
摘要就是一段信息或者一个文件通过某个哈希算法得到的一串字符。不同的文件计算出的摘要是不同的(也有可能相同,但是可能性非常非常低),摘要是不可逆的。
摘要算法通常用来判断文件是否被篡改过。
- 常用的摘要算法有MD5、SHA等
- 工具:www.npmjs.com/package/js-…
4. 数字签名
数字签名是摘要和非对称加密的结合体,用来解决网络传输中的篡改问题。 数据签名算法的模型分为两个主要阶段:
- 1、签名: 先计算数据的摘要,再使用私钥对摘要进行加密生成签名,将数据和签名一并发送给接收方;
- 2、验证: 接收方先使用相同的摘要算法计算接收数据的摘要,再使用公钥解密签名,对比解密的签名和计算的摘要是否一致。若一致,则说明数据没有被篡改。
5. 数字证书
数字签名和数字证书总是成对出现,二者不可分离。数字签名用来防篡改,数字证书用来防伪装。 数字证书主要包含三个部分:用户的信息、用户的公钥和 CA 对该证书实体信息的签名。
总结
网络中传输数据,存在三大安全风险:窃听、篡改和伪装
- 窃听:http使用明文传输,一旦请求被截获,数据就会泄露,而现在有很多抓包工具可以截获网络请求,如wireshark。现在普遍通过加密解决窃听风险,这样即使请求被截获,也无法获取数据真实含义。
- 篡改:中间攻击人会篡改请求和响应,让服务器和客户端之间的通信看起来仍是正常的,但实际已经被控制,可使用数字签名防篡改。
- 伪装:http不验证身份,发送方和接收方无法确认对方的身份,中间人可能伪装成合法的身份和双方通信。可使用数字证书验证身份。
最后推荐大家一篇优秀的文章:juejin.cn/post/699554…