72 lines
2.0 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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