71 lines
2.1 KiB
JavaScript
71 lines
2.1 KiB
JavaScript
|
|
// 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});
|
|||
|
|
}
|
|||
|
|
|