在项目中安装依赖:
npm i crypto-js
在使用的页面引入:
import CryptoJS from 'crypto-js'
crypto-js中AES的加解密简单的封装了一下:
//加密
const KEY = '000102030405060708090a0b0c0d0e0f' // 秘钥 这两个需要和后端统一
const IV = '8a8c8fd8fe33743d3638737ea4a00698' // 偏移量 这两个需要和后端统一
const encrypt = (word, keyStr, ivStr) => {
// 如果后端想要的是json串的话
// JSON.stringify(word) // 当然也可以都json一下 不看是否原本是对象
// 大多数 我们还是使用的 JSON
word = typeof word === 'object' ? JSON.stringify(word) : word;
keyStr = keyStr ?? KEY; //判断是否存在ksy,不存在就用定义好的key
ivStr = ivStr ?? IV;
// 字符串类型的key用之前需要用uft8先parse一下才能用
const key = CryptoJS.enc.Utf8.parse(keyStr);
const iv = CryptoJS.enc.Utf8.parse(ivStr);
const srcs = CryptoJS.enc.Utf8.parse(word);
const encrypted = CryptoJS.AES.encrypt(srcs, key,
{
iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
return encrypted.toString();
}
console.log(encrypt({ a: "zjq" }), '六卿1 加密')
console.log(encrypt('zjq'), '六卿2 加密')
// 解密
const decrypt = (info, keyStr, ivStr) => {
keyStr = keyStr ?? KEY; // 秘钥 这两个需要和后端统一
ivStr = ivStr ?? IV; // 偏移量 这两个需要和后端统一
// 字符串类型的key用之前需要用uft8先parse一下才能用
const key = CryptoJS.enc.Utf8.parse(keyStr);
const iv = CryptoJS.enc.Utf8.parse(ivStr);
const decrypt = CryptoJS.AES.decrypt(info, key, {
iv,//偏移量
mode: CryptoJS.mode.CBC, //加密模式
padding: CryptoJS.pad.Pkcs7,// 对应后端 PKCS5Padding 补码方式
});
const CryptoJSDecrypt = CryptoJS.enc.Utf8.stringify(decrypt).toString();
let returnData = null
try {
returnData = JSON.parse(CryptoJSDecrypt)
} catch (err) {
returnData = CryptoJSDecrypt
}
return returnData
}
console.log(decrypt('orYWcztZKmZO+P7UomQ5og=='), '六卿1 解密')
console.log(decrypt('0WnM4/UsqpUGiJ79SCGTOg=='), '六卿2 解密')
可以直接用,可以加解密字符串或者对象,解密之后也是正常的格式;
参考:
https://www.cnblogs.com/huiguo/p/16601076.html
https://www.codenong.com/29512858/
https://blog.csdn.net/qq_34402069/article/details/126503916