javascript
npm i gm-crypto//安装gm-crypto
创建一份gmCrypt.js文件
javascript
const { SM4 } = require("gm-crypto");
export default function(params) {
if (typeof params == "undefined") {
params = null;
}
//秘钥与IV要与后端一致,秘钥和iv若医师16进制格式,则无需转换
// 原始 base64 密钥
const base64Key = "XXXXXXXXXXXXXXXXXXXXX";
// 将 base64 密钥转换为 32 位十六进制字符串
const keyBuffer = Buffer.from(base64Key, "base64");
let keyHex32 = keyBuffer.toString("hex");
// 确保是 32 位十六进制字符串(16字节 * 2)
if (keyHex32.length < 32) {
keyHex32 = keyHex32.padStart(32, "0");
} else if (keyHex32.length > 32) {
keyHex32 = keyHex32.substring(0, 32);
}
// IV 参数(CBC模式需要)
const base64Iv = "XXXXXXXXXXXXXXXXXXXXXX";
const ivBuffer = Buffer.from(base64Iv, "base64");
let ivHex32 = ivBuffer.toString("hex");
// 确保 IV 也是 32 位十六进制字符串
if (ivHex32.length < 32) {
ivHex32 = ivHex32.padStart(32, "0");
} else if (ivHex32.length > 32) {
ivHex32 = ivHex32.substring(0, 32);
}
try {
// 加密
const _encryptedData = SM4.encrypt(params, keyHex32, {
inputEncoding: "utf8",
outputEncoding: "base64",
iv: ivHex32,
mode: SM4.constants.CBC,
});
// 解密
const _decryptedData = SM4.decrypt(_encryptedData, keyHex32, {
iv: ivHex32,
mode: SM4.constants.CBC,
inputEncoding: "base64",
outputEncoding: "utf8",
});
return _encryptedData;
} catch (error) {
console.error("SM4加密失败:", error);
throw error;
}
}
在页面中使用
javascript
//导入
import GmCrypt from "../util/gmCrypt";
//使用
const _stringifyData = '需要sm4加密处理的数据'
const _sm4Data = GmCrypt(_stringifyData);
console.log("_sm4Data ", _sm4Data );