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 );
相关推荐
梦想很大很大18 小时前
让 AI 成为“报表配置员”:BI 低代码平台的 Schema 实践路径
前端·人工智能·低代码
用户0595401744618 小时前
asyncio 踩坑实录:这个问题坑了我3小时,差点让线上服务崩掉
前端·css
喂哟咦18 小时前
关于用codex两周写了一个epub阅读器这件事
前端·javascript
CDwenhuohuo19 小时前
前端文件预览
开发语言·前端·javascript
test_000119 小时前
JavaScript展开运算符的三个妙用
前端
前端尤雨西19 小时前
ElementPlus 源码之 packages 目录
前端·element
我要让全世界知道我很低调19 小时前
扔掉你的 Playwright MCP,拥抱 Playwright CLI
前端
Daybreak19 小时前
从 npm 到 pnpm:包管理器演进与 Monorepo 依赖冲突求生
前端
Restart-AHTCM19 小时前
AI 时代的大前端崛起,TypeScript 重塑前端开发
前端·人工智能·typescript·ai编程·a
008爬虫实战录19 小时前
【最新猿人学】 验证码 - 图文点选 文字验证码识别
前端·javascript