aes 对称 加密 / 解密
公司项目敏感数据较多,决定前后端进行接口加密处理,采用的是 AES + BASE64 算法加密~
AES加密简单介绍
高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。对称加密算法也就是加密和解密用相同的密钥,具体的加密流程如下图:
image.png
实现
首先简单介绍一下 Crypto-js
crypto-js 是一个纯 javascript 写的加密算法类库 ,可以非常方便地在 javascript 进行 MD5、SHA1、SHA2、SHA3、RIPEMD-160 哈希散列,进行 AES、DES、Rabbit、RC4、Triple DES 加解密 GitHub
采用 npm 进行下载安装
npm install crypto-js --save
下面我们来定义两个函数,分别是加密和解密
const AES = require('crypto-js');
const key = AES.enc.Utf8.parse('0123456789ASDFGH'); //十六位十六进制数作为密钥
const iv = AES.enc.Utf8.parse('ASDFGH0123456789'); //十六位十六进制数作为密钥偏移量
// 加密
export function encrypt(word) {
const src = AES.enc.Utf8.parse(word);
const encrypted = AES.AES.encrypt(src, key, { iv, mode: AES.mode.CBC, padding: AES.pad.Pkcs7 });
return encrypted.ciphertext.toString().toUpperCase();
};
// 解密
export function decrypt(word) {
const encryptedHexStr = AES.enc.Hex.parse(word);
const src = AES.enc.Base64.stringify(encryptedHexStr);
const decrypt = AES.AES.decrypt(src, key, { iv, mode: AES.mode.CBC, padding: AES.pad.Pkcs7 });
const decryptedStr = decrypt.toString(AES.enc.Utf8);
return decryptedStr.toString();
}
注意密钥的长度由对称解密使用的算法是 AES-128-CBC
算法,数据采用 PKCS#7
填充 , 因此这里的 key
需要为16位!
我们通过 export default
暴漏出去 解密 decrypt
和 加密 encrypt
两个函数 方便在需要的时候进行引入并传入参数调用即可
网友评论