72 lines
2.0 KiB
JavaScript
Raw Normal View History

2025-04-16 18:15:18 +08:00
import Taro from "@tarojs/taro";
import { useEffect, useRef, useState, useCallback } from "react";
import CryptoJS from "crypto-js";
import useStore from "@/store/index";
/**
*
* @param {*} hexData
* @param {*} key
* @param {*} iv
* @returns
*/
export const aes128Encrypt = (hexData, key = "23572fb6364ba347f8b441586b632d3f", iv = "") => {
// 将十六进制字符串转换为字节数组
var data = CryptoJS.enc.Hex.parse(hexData);
// 将密钥和 IV初始向量转换为字节数组
var keyBytes = CryptoJS.enc.Hex.parse(key);
var ivBytes = CryptoJS.enc.Hex.parse(iv);
// 执行 AES-128 加密,使用 CBC 模式和 PKCS7 填充
var encrypted = CryptoJS.AES.encrypt(data, keyBytes, {
iv: ivBytes,
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.ZeroPadding,
});
// 将加密后的字节数组转换为十六进制字符串
var encryptedHex = encrypted.ciphertext.toString();
return encryptedHex;
};
/**
* 解密方法
* @param data
* @returns {string}
*/
export function aes128Decrypt(data, key = "23572fb6364ba347f8b441586b632d3f", iv = "") {
// 十六位十六进制数作为密钥
const keyBytes = CryptoJS.enc.Hex.parse(key);
// 十六位十六进制数作为密钥偏移量
const ivBytes = CryptoJS.enc.Hex.parse(iv);
const encryptedHexStr = CryptoJS.enc.Hex.parse(data);
const str = CryptoJS.enc.Base64.stringify(encryptedHexStr);
const decrypt = CryptoJS.AES.decrypt(str, keyBytes, {
iv: ivBytes,
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.NoPadding,
});
const decryptedStr = decrypt.toString(CryptoJS.enc.Hex);
return decryptedStr.toString();
}
/**
*
* @param fn 需要防抖的函数
* @param time 防抖时间
* @returns
*/
export const debounce = (fn, time = 300) => {
let timer;
return function (...argu) {
if (timer) {
clearTimeout(timer);
timer = null;
}
timer = setTimeout(() => {
fn(...argu);
clearTimeout(timer);
timer = null;
}, time);
};
}