由于公司的项目涉及敏感数据问题,需要对数据进行加密,以最大限制防止别人的抓包和数据泄露,除了使用https的安全,前端常用的加密算法对称加密和非对称加密,今天主要说对称加密AES。
1、概况
crypto-js是谷歌开发的纯JavaScript的机密算法类库,可以很方便在前端进行数据加密操作,目前支持的算法有:MD5,SHA-1,SHA-256,AES.....,
2、使用方法
直接使用:引入crypto-js文件
依赖安装:npm install crypto-js 引入 import CryptoJS from 'crypto-js'
3、示例
上面的代码常用的简单的加密,key是密钥,iv是偏移量,一般是接口返回或者前后事前定义好的,接口明文传输密钥和偏移量容易泄露,可以对密钥和偏移量进行非对称加密。
注意的是密钥的长度,由于对称加密使用AES-128-CBC算法,采用的PKCS7填充的,因此密钥key的长度为16位
4、特点
- 优点:算法公开、计算量小、加密速度快、加密效率高。
- 缺点:在数据传送前,发送方和接收方必须商定好密钥,然后双方保存好密钥。如果一方的密钥被泄露,那么加密信息也就不安全了
- 使用场景:本地数据加密、https 通信、网络传输等
六、总结
在业务 http 请求中,AES 的密钥在前端随机生成,从服务器获取 RSA 的公钥,对 AES 的密钥进行非对称加密,把加密后的密钥在请求头中传给服务器,用 AES 对 body 进行加密。服务器收到请求头中的加密后的密钥,用 RSA 的密钥进行解密,得到明文的 AES 密钥,即可对 body 进行解密。