vue使用gm-crypto对数据进行sm4加密处理

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 );
相关推荐
涵涵(互关)8 分钟前
Naive-ui树型选择器只显示根节点
前端·ui·vue
BY组态16 分钟前
Ricon组态系统最佳实践:从零开始构建物联网监控平台
前端·物联网·iot·web组态·组态
BY组态21 分钟前
Ricon组态系统vs传统组态软件:为什么选择新一代Web组态平台
前端·物联网·iot·web组态·组态
SoaringHeart23 分钟前
Flutter进阶:OverlayEntry 插入图层管理器 NOverlayZIndexManager
前端·flutter
放下华子我只抽RuiKe533 分钟前
React 从入门到生产(四):自定义 Hook
前端·javascript·人工智能·深度学习·react.js·自然语言处理·前端框架
XinZong1 小时前
OpenClaw 实现双重心跳(Heartbeat)+ clawreach虾聊项目实现
javascript
IT_陈寒2 小时前
Redis缓存击穿把我整不会了,原来还有这手操作
前端·人工智能·后端
idcu2 小时前
深入 Lyt.js 组件系统:L2 渲染引擎层的核心
前端·typescript
这是程序猿3 小时前
Spring Boot自动配置详解
java·大数据·前端
文心快码BaiduComate3 小时前
干货|Comate Harness Engineering工程实践指南
前端·后端·程序员