本文代码使用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
})
}