You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
1.5 KiB
TypeScript
67 lines
1.5 KiB
TypeScript
import CryptoJS from 'crypto-js';
|
|
|
|
/**
|
|
* 随机生成32位的字符串
|
|
* @returns {string}
|
|
*/
|
|
const generateRandomString = () => {
|
|
const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
|
|
let result = '';
|
|
const charactersLength = characters.length;
|
|
for (let i = 0; i < 32; i++) {
|
|
result += characters.charAt(Math.floor(Math.random() * charactersLength));
|
|
}
|
|
return result;
|
|
};
|
|
|
|
/**
|
|
* 随机生成aes 密钥
|
|
* @returns {string}
|
|
*/
|
|
export const generateAesKey = () => {
|
|
return CryptoJS.enc.Utf8.parse(generateRandomString());
|
|
};
|
|
|
|
/**
|
|
* 加密base64
|
|
* @returns {string}
|
|
*/
|
|
export const encryptBase64 = (str: CryptoJS.lib.WordArray) => {
|
|
return CryptoJS.enc.Base64.stringify(str);
|
|
};
|
|
|
|
/**
|
|
* 解密base64
|
|
*/
|
|
export const decryptBase64 = (str: string) => {
|
|
return CryptoJS.enc.Base64.parse(str);
|
|
};
|
|
|
|
/**
|
|
* 使用密钥对数据进行加密
|
|
* @param message
|
|
* @param aesKey
|
|
* @returns {string}
|
|
*/
|
|
export const encryptWithAes = (message: string, aesKey: CryptoJS.lib.WordArray) => {
|
|
const encrypted = CryptoJS.AES.encrypt(message, aesKey, {
|
|
mode: CryptoJS.mode.ECB,
|
|
padding: CryptoJS.pad.Pkcs7
|
|
});
|
|
return encrypted.toString();
|
|
};
|
|
|
|
/**
|
|
* 使用密钥对数据进行解密
|
|
* @param message
|
|
* @param aesKey
|
|
* @returns {string}
|
|
*/
|
|
export const decryptWithAes = (message: string, aesKey: CryptoJS.lib.WordArray) => {
|
|
const decrypted = CryptoJS.AES.decrypt(message, aesKey, {
|
|
mode: CryptoJS.mode.ECB,
|
|
padding: CryptoJS.pad.Pkcs7
|
|
});
|
|
return decrypted.toString(CryptoJS.enc.Utf8);
|
|
};
|