51 lines
1.4 KiB
TypeScript
51 lines
1.4 KiB
TypeScript
import CryptoJS from 'crypto-js';
|
|
import { isValid, decode } from 'js-base64';
|
|
|
|
/**
|
|
* AES 加密并转为 base64
|
|
* @param plaintext 数据字符串
|
|
* @param aeskey 密钥
|
|
* @returns 加密字符串
|
|
*/
|
|
export function encryptAES(plaintext: string, aeskey: string): string {
|
|
const nowRoaund = new Date().getTime().toString(6);
|
|
const key = CryptoJS.enc.Utf8.parse(aeskey);
|
|
const iv = CryptoJS.enc.Utf8.parse(nowRoaund);
|
|
const encrypted = CryptoJS.AES.encrypt(`${nowRoaund}${plaintext}`, key, {
|
|
iv: iv,
|
|
blockSize: 16,
|
|
mode: CryptoJS.mode.CBC,
|
|
padding: CryptoJS.pad.Pkcs7,
|
|
format: CryptoJS.format.OpenSSL,
|
|
});
|
|
return encrypted.toString();
|
|
}
|
|
|
|
/**
|
|
* AES 解密
|
|
* @param ciphertext 加密字符串
|
|
* @param aeskey 密钥
|
|
* @returns 数据字符串
|
|
*/
|
|
export function decryptAES(ciphertext: string, aeskey: string): string {
|
|
const nowRoaund = new Date().getTime().toString(6);
|
|
const key = CryptoJS.enc.Utf8.parse(aeskey);
|
|
const iv = CryptoJS.enc.Utf8.parse(nowRoaund);
|
|
const decrypted = CryptoJS.AES.decrypt(ciphertext, key, {
|
|
iv: iv,
|
|
blockSize: 16,
|
|
mode: CryptoJS.mode.CBC,
|
|
padding: CryptoJS.pad.Pkcs7,
|
|
format: CryptoJS.format.OpenSSL,
|
|
});
|
|
const base64Str = decrypted.toString(CryptoJS.enc.Base64);
|
|
if (isValid(base64Str)) {
|
|
const str = decode(base64Str);
|
|
const idx = str.indexOf(':)', 10);
|
|
if (idx > 10) {
|
|
return str.substring(idx + 2);
|
|
}
|
|
}
|
|
return '';
|
|
}
|