先下载sm-crypto包和CryptoJS 包
import CryptoJS from 'crypto-js'
const sm2 = require('sm-crypto').sm2
const cipherMode = 0 // 1 - C1C3C2,0 - C1C2C3,默认为1
// 公钥,找后端要
const publicKey = ''
// AES-128-CBC偏移量
const CBCIV = ''
export const encrypt = (data) => {
let encryptDataMD5 = CryptoJS.MD5(data + '随便写').toString()
// 加04听说是后端解密需要
// `04${sm2.doEncrypt(需要加密的数据, 公钥, 模式)}`
// 这一步如果报错TypeError: Cannot read properties of null (reading 'multiply'),不要纠结,直接找后端,公钥错误!!!
let encryptDatasm2 = `04${sm2.doEncrypt(encryptDataMD5, publicKey, cipherMode)}`
let key = CryptoJS.enc.Utf8.parse(CBCIV)
let secretData = CryptoJS.enc.Utf8.parse(encryptDatasm2)
let encrypted = CryptoJS.AES.encrypt(
secretData,
key,
{
iv: CryptoJS.enc.Utf8.parse(CBCIV),
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
}
)
return encrypted.toString()
}