vue项目使用国密SM2,SM3,SM4功能实现,使用sm-crypto实现
时间:2025-04-12 09:16:09
关键词:sm-crypto,国密算法

本文代码使用typescript,使用普通js的项目可以手动修改部分代码使用。

首先下载包

npm i sm-crypto

SM2方法。

SM2是非对称加密算法,使用前需要先使用方法生成密钥对。使用公钥进行内容加密,使用私钥进行解密。

功能类似于RSA加密。

/**
 * 生成 SM2 密钥对
 * @returns { { publicKey: string, privateKey: string } } 公钥/私钥对象
 */
export function generateSM2KeyPair() {
  return sm2.generateKeyPairHex()
}

/**
 * SM2 加密
 * @param {string} plainText 明文文本
 * @param {string} publicKey 公钥
 * @param {number} [mode=0] 加密模式(0: C1C3C2,1: C1C2C3)
 * @returns {string} 加密后的 hex 字符串
 */
export function sm2Encrypt(plainText:string, publicKey:string, mode = 1) {
  return sm2.doEncrypt(plainText, publicKey, mode)
}

/**
 * SM2 解密
 * @param {string} cipherText 加密后的 hex 字符串
 * @param {string} privateKey 私钥
 * @param {number} [mode=0] 加密模式(需与加密时一致)
 * @returns {string} 解密后的明文
 */
export function sm2Decrypt(cipherText:string, privateKey:string, mode = 1) {
  return sm2.doDecrypt(cipherText, privateKey, mode)
}

SM3方法

SM3是一种哈希算法,作用可以代替MD5 SHA等方法。

/**
 * SM3 哈希计算
 * @param {string|Array} data 输入数据(字符串或数组)
 * @returns {string} 哈希结果的 hex 字符串
 */
export function sm3Hash(data: string | Array<any>) {
  return sm3(data)
}

SM4方法

SM4加密是一种对称加密算法,类似于AES。

加密需要自行生成key和iv,解密的时候需要想通的key和iv

/**
 * SM4 加密
 * @param {string} plainText 明文文本
 * @param {string} key 加密密钥(32字符 hex 字符串)
 * @param {string} iv 初始化向量(32字符 hex 字符串)
 * @param {string} [mode='cbc'] 加密模式('cbc' 或 'ecb')
 * @returns {string} 加密后的 hex 字符串
 */
export function sm4Encrypt(plainText: string, key: string, iv: string, mode = 'cbc') {
  return sm4.encrypt(plainText, key, {
    mode: mode,
    iv: iv
  })
}

/**
 * SM4 解密
 * @param {string} cipherText 加密后的 hex 字符串
 * @param {string} key 加密密钥(需与加密时一致)
 * @param {string} iv 初始化向量(需与加密时一致)
 * @param {string} [mode='cbc'] 加密模式(需与加密时一致)
 * @returns {string} 解密后的明文
 */
export function sm4Decrypt(cipherText: string, key: string, iv: string, mode = 'cbc') {
  return sm4.decrypt(cipherText, key, {
    mode: mode,
    iv: iv
  })
}