import CryptoJS from 'crypto-js'; /** * MD5 哈希 * @param str 待加密字符串 */ export function md5(str: string): string { return CryptoJS.MD5(str).toString(); } /** * SHA256 哈希 * @param str 待加密字符串 */ export function sha256(str: string): string { return CryptoJS.SHA256(str).toString(); } /** * SHA1 哈希 * @param str 待加密字符串 */ export function sha1(str: string): string { return CryptoJS.SHA1(str).toString(); } /** * Base64 编码 * @param str 待编码字符串 */ export function base64Encode(str: string): string { const wordArray = CryptoJS.enc.Utf8.parse(str); return CryptoJS.enc.Base64.stringify(wordArray); } /** * Base64 解码 * @param str 待解码 Base64 字符串 */ export function base64Decode(str: string): string { const wordArray = CryptoJS.enc.Base64.parse(str); return CryptoJS.enc.Utf8.stringify(wordArray); } /** * AES 加密(CBC 模式,PKCS7 填充) * @param data 待加密数据 * @param key 密钥 * @param iv 偏移量 */ export function aesEncrypt( data: string, key: string, iv: string, ): string { const keyWordArray = CryptoJS.enc.Utf8.parse(key); const ivWordArray = CryptoJS.enc.Utf8.parse(iv); const encrypted = CryptoJS.AES.encrypt(data, keyWordArray, { iv: ivWordArray, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7, }); return encrypted.toString(); } /** * AES 解密(CBC 模式,PKCS7 填充) * @param encryptedData 密文(Base64) * @param key 密钥 * @param iv 偏移量 */ export function aesDecrypt( encryptedData: string, key: string, iv: string, ): string { const keyWordArray = CryptoJS.enc.Utf8.parse(key); const ivWordArray = CryptoJS.enc.Utf8.parse(iv); const decrypted = CryptoJS.AES.decrypt(encryptedData, keyWordArray, { iv: ivWordArray, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7, }); return CryptoJS.enc.Utf8.stringify(decrypted); } /** * HMAC-SHA256 签名 * @param data 待签名数据 * @param key 密钥 */ export function hmacSha256(data: string, key: string): string { return CryptoJS.HmacSHA256(data, key).toString(); } export default CryptoJS;