前言
最新因需求变动,原有Android系统已经不满足现有的需求,需开发PC端的客户端,对应的数据加解密也不能公用同一个类库(后端服务使用的JAVA),现有架构使用的是nodejs,所以记录以下加解密的过程。
环境
nodejs v14.17.5
vue3
electron 13.0.0
安装加解密依赖
yarn
yarn add crypto-js
复制代码
npm
npm install crypto-js --save-dev
复制代码
加解密工具类
AESUtils.js
import CryptoJS from "crypto-js";
//加密
export function Encrypt(data,key,iv) {
//编码 key
key = CryptoJS.enc.Utf8.parse(key);
//编码iv
iv = CryptoJS.enc.Utf8.parse(iv);
//编码data
data = CryptoJS.enc.Utf8.parse(data);
// 加密模式为CBC,补码方式为NoPadding
let encrypted = CryptoJS.AES.encrypt(data, key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.NoPadding
});
console.log("加密后的数据:",encrypted.toString())
//返回base64
return CryptoJS.enc.Base64.stringify(encrypted.ciphertext);
}
//解密
export function Decrypt(data,key,iv) {
//编码
key = CryptoJS.enc.Utf8.parse(key);
//编码
iv = CryptoJS.enc.Utf8.parse(iv);
//Base64编码
const base64 = CryptoJS.enc.Base64.parse(data);
const base64Str = CryptoJS.enc.Base64.stringify(base64);
const decrypt = CryptoJS.AES.decrypt(base64Str, key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.NoPadding
});
let decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
console.log("解密后的数据:",decryptedStr.toString())
return decryptedStr.toString();
}
复制代码
注意:如果导致解密不成功需要注意
mode: CryptoJS.mode.CBC
,padding: CryptoJS.pad.NoPadding
与服务端是否一致,不一致即会造成加解密失败;
使用
本片实验环境为VUE,则引入方式入下
import { Encrypt, Decrypt} from 'utils/AESUtils.js'
复制代码
调用
const key = "09dff66a91bbff58452e9090eb2cfeb5";
const iv = "87705261ed666ea3";
const data = "bfb7758c68396bbb088dced7c55b4cf7";
//加密
const encrypted = Encrypt(data,key,iv);
console.log("输出加密结果:",encrypted)
//输出加密结果:Z18AuLGua+YEJ4ahQuvAvDORNr/Yns2Dh1vO96ZCQH8=
//解密
const decrypted = Decrypt(data,key,iv)
console.log("输出解密结果:",decrypted)
复制代码
总结
以上即使前端AES加解密的过程,不要问我为什么知道mode与pad需要注意,你懂的,大家如果有更好的方案欢迎讨论,本人Java程序员一个,不要太严厉。
参考
\
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END