// src/utils/encryption.js import { sm2, sm3, sm4 } from 'sm-crypto' import SM4 from 'sm-crypto/src/sm4' // 配置项,例如盐值、SM2 公私钥、SM4 密钥 const SM_CONFIG = { SALT: '2cc0c5f9f1749f1632efa9f63e902323', // SM3 盐值(16 字节) SM4_KEY:"78d1295afa99449b99d6f83820e6965c", // SM4 对称加密密钥 SM4_SALT:"f555adf6c01d0ab0761e626a2dae34a2", SM2_PUBLIC_KEY: 'your-public-key', // SM2 公钥 SM2_PRIVATE_KEY: 'your-private-key' // SM2 私钥 } // AES 配置 const AES_CONFIG = { AES_KEY: 'zhgd@bonus@zhgd@bonus@1234567890', // AES key值 AES_IV: '1234567812345678' // AES 偏移量 } export function generateUUID() { // 使用当前时间戳和随机数生成一个 UUID return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) { const r = Math.random() * 16 | 0; // 生成随机数 const v = c === 'x' ? r : (r & 0x3 | 0x8); // 根据 UUID 规范生成相应的值 return v.toString(16); // 转换为十六进制 }); } // SM3 哈希 export function hashSM3(text) { // 对数据进行哈希计算 return sm3(text) } // 使用 SM3 进行哈希并加入盐值 export function hashWithSM3AndSalt(text) { // 将文本和盐值拼接在一起 const textWithSalt = SM_CONFIG.SALT + text // 使用 SM3 进行哈希 return hashSM3(textWithSalt) } // SM2 加密 export function encryptWithSM2(text) { // SM2 公钥加密 return sm2.doEncrypt(text, SM_CONFIG.SM2_PUBLIC_KEY) } // SM2 解密 export function decryptWithSM2(encryptedText) { // SM2 私钥解密 return sm2.doDecrypt(encryptedText, SM_CONFIG.SM2_PRIVATE_KEY) } /** * 加密函数 * @param {string} plainText * @returns {string} 加密后的密文(Hex 编码格式) */ export function encryptWithSM4(plainText) { return sm4.encrypt(plainText, SM_CONFIG.SM4_KEY,{ mode: 'cbc', padding: 'pkcs#5',iv:SM_CONFIG.SM4_SALT}); } /** * 解密函数 * @param {string} cipherText * @returns {string} 解密后的明文 */ export function decryptWithSM4(cipherText){ return SM4.decrypt(cipherText, SM_CONFIG.SM4_KEY,{ mode: 'cbc', padding: 'pkcs#5' ,iv:SM_CONFIG.SM4_SALT}); }