72 lines
2.0 KiB
JavaScript
72 lines
2.0 KiB
JavaScript
|
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);
|
|||
|
};
|
|||
|
}
|