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 );
相关推荐
阿赛工作室2 小时前
Vue中onBeforeUnmount不触发的解决方案
前端·javascript·vue.js
码王吴彦祖2 小时前
顶象 AC 纯算法迁移实战:从补环境到纯算的完整拆解
java·前端·算法
小叶lr2 小时前
jenkins打包前端样式丢失/与本地不一致问题
运维·前端·jenkins
浩星3 小时前
electron系列1:Electron不是玩具,为什么桌面应用需要它?
前端·javascript·electron
ZC跨境爬虫3 小时前
Scrapy工作空间搭建与目录结构解析:从初始化到基础配置全流程
前端·爬虫·python·scrapy·自动化
小村儿3 小时前
连载04-最重要的Skill---一起吃透 Claude Code,告别 AI coding 迷茫
前端·后端·ai编程
_院长大人_4 小时前
Vue + ECharts 实现价格趋势分析图
前端·vue.js·echarts
疯笔码良4 小时前
【Vue】自适应布局
javascript·vue.js·css3
浩星4 小时前
electron系列2:搭建专业Electron开发环境
javascript·typescript·electron