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 );
相关推荐
恋猫de小郭1 分钟前
Flutter 官方表示:AI 时代代码越来越容易写,为什么还要一套代码库?
android·前端·flutter
软件派8 分钟前
Chrome 插件开发实战指南
前端·chrome
ly76898 分钟前
性能剖析与压测方法论:JMH、async-profiler 与分层瓶颈定位的可复现实验
服务器·前端·数据库·压测·jmh·性能剖析·async-profiler
ZoeLandia21 分钟前
React05:useEffect 与副作用
开发语言·前端·react.js·typescript
狮子座的男孩28 分钟前
html+css基础:24、2D变换(位移/缩放/旋转/扭曲(了解)/多重变换/变换原点)
前端·css·经验分享·html·2d位移·原点变换·缩放/旋转/扭曲
weixin_4173968337 分钟前
酒店弱电怎么验收?四个阶段与逐项检查清单
开发语言·前端·php·综合布线·弱电
风骏时光牛马37 分钟前
探索AI开源工具,解锁原生创造新体验
前端
u01110267539 分钟前
Vue 页面离开后还在轮询?统一清理计时器、监听器与观察器
前端·javascript·vue.js
大猩猩X42 分钟前
vue 表格组件 vxe-table 实现多行编辑,支持增删改查与校验
前端·javascript·vue.js·vxe-table
ss2731 小时前
基于springboot+vue+mysql「校园二手教材循环交易」小程序,三端全跑通
vue.js·spring boot·mysql