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); }; }