目录
- AES 加解密都需要使用 toString() 方法把它们转换成字符串,解密时需要把字符串编译成 Utf8 编码格式
- 对象、数组加密原始数据需要转换成 JSON 字符串,使用 JSON.stringify()
- 对象、数组解密后的数据需要使用 JSON.parse() 解析
AES 加解密介绍
高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。对称加密算法也就是加解密用相同的密钥,具体加密流程如下图:
- 明文P:
- 没有经过加密的数据
- 密文C:
- 经加密函数处理后的数据
- 密钥K:
- 用来加密明文密码,在对称加密算法中,加解密密钥相同
- 密钥是接收方与发送方协商产生,不可以直接在网络上传输,否则会导致密钥泄漏
- 密钥通过非对称加密算法加密密钥,再通过网络传输给对方,或者直接面对面商量密钥
- 密钥绝对不可以泄漏,否则会被攻击者还原密文,窃取机密数据
- 对称加密算法:
- 加密和解密用到的密钥是相同的,这种加密方式加密速度非常快,适合经常发送数据的场合。缺点是密钥的传输比较麻烦
- 非对称加密算法:
- 加密和解密用的密钥是不同的,这种加密方式是用数学上的难解问题构造的,通常加密解密的速度比较慢,适合偶尔发送数据的场合。优点是密钥传输方便。常见的非对称加密算法为RSA、ECC和EIGamal
AES 加密语法
CryptoJS.AES.encrypt('待加密字符串', '密钥').toString()
AES 解密语法
CryptoJS.AES.decrypt('待解密字符串', '密钥').toString(CryptoJS.enc.Utf8)
案例1:文本加解密
- 加密
- ciphertext 密文:经加密函数处理后的数据
const ciphertext = CryptoJS.AES.encrypt('my message', 'secret key').toString()
- 解密
- plaintext 明文:没有经过加密的数据
const plaintext = CryptoJS.AES.decrypt(ciphertext, 'secret key').toString(CryptoJS.enc.Utf8)
案例2:对象加解密
- 原始数据
const arr = [{id: 1}, {id: 2}]
const strArr = JSON.stringify(arr)
- 加密
const ciphertext = CryptoJS.AES.encrypt(strArr, 'secret key').toString()
- 解密
const plaintext = CryptoJS.AES.decrypt(ciphertext, 'secret key').toString(CryptoJS.enc.Utf8)
const plaintextArr = JSON.parse(plaintext)
参考资料: