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