先引入包
npm install crypto-js
引入
import CryptoJS from "crypto-js";
直接使用import会报错
import { decrypt, encrypt } from “./utils/encrypt”;
^^^^^^
SyntaxError: Cannot use import statement outside a module
Node.js 中使用了 ES6 的 import 语法,但 Node.js 默认不支持这种语法。要解决这个问题,你可以尝试以下方法:
方法1:将文件扩展名更改为 .mjs
将你的文件扩展名从 .js 更改为 .mjs,然后使用 import 语法。例如,将 src/utils/encrypt.js 和 src/main.js 的扩展名更改为 .mjs。
方法2:在 package.json 中设置 “type”: “module”
在你的项目的 package.json 文件中,添加以下设置:
{
“type”: “module”
}
这将允许你在整个项目中使用 ES6 的 import 语法。
#### 方法3:使用 require 代替 import
将你的 import 语句更改为使用 require 语法。例如,将 src/main.js 中的 import 语句更改为:
const CryptoJS = require("crypto-js");
具体代码如下:
import CryptoJS from “crypto-js”;
// 导入CryptoJS库
// 十六位十六进制数作为密钥
const KEY = CryptoJS.enc.Utf8.parse(“1212131212131111”);
// 十六位十六进制数作为密钥偏移量
const IV = CryptoJS.enc.Utf8.parse(“1212121213121213”);
/**
* 加密方法
* @param data 需要加密的数据
* @returns {string} 加密后的字符串
*/
export function encrypt(data) {
if (typeof data === “object”) {
try {
// 将对象转换为JSON字符串
// eslint-disable-next-line no-param-reassign
data = JSON.stringify(data);
} catch (error) {
console.log(“encrypt error:”, error);
}
}
// 将数据转换为UTF8编码的十六进制字符串
const dataHex = CryptoJS.enc.Utf8.parse(data);
// 使用AES加密算法,加密数据
const encrypted = CryptoJS.AES.encrypt(dataHex, KEY, {
iv: IV,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
// 返回加密后的字符串
return encrypted.ciphertext.toString();
}
/**
* 解密方法
* @param data 需要解密的数据
* @returns {string} 解密后的字符串
*/
export function decrypt(data) {
// 将加密后的数据转换为十六进制字符串
const encryptedHexStr = CryptoJS.enc.Hex.parse(data);
// 将十六进制字符串转换为Base64编码的字符串
const str = CryptoJS.enc.Base64.stringify(encryptedHexStr);
// 使用AES解密算法,解密数据
const decrypt = CryptoJS.AES.decrypt(str, KEY, {
iv: IV,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
// 将解密后的数据转换为UTF8编码的字符串
const decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
// 返回解密后的字符串
return decryptedStr.toString();
}
// 测试数据
const data = “13222”
// 对数据进行加密
const encryptText = encrypt(data);
console.log(“加密”, encryptText);
// 对加密后的数据进行解密
const decryptText = decrypt(encryptText);
console.log(“解密”, decryptText);