// 假设我们有一个名为 sm4 的模块,它提供了加密功能 const sm4 = require('sm-crypto'); // 这里需要替换为实际的路径或库名 function SM4Encrypt_ECB(plainText, secretKey, hexString = false) { const sm4Context = { isPadding: true, mode: 'encrypt', // 使用加密模式 }; let key; if (!hexString) { key = wx.arrayBufferToBase64(new TextEncoder().encode(secretKey)); } else { key = decodeHexString(secretKey); // 需要自己实现decodeHexString函数 } // 设置加密密钥 sm4.setKey(sm4Context, key); // 加密数据 const encryptedData = sm4.encryptECB(sm4Context, new TextEncoder().encode(plainText)); // 返回编码后的结果 return encodeBytesToHex(encryptedData); } function decodeHexString(hexString) { // 实现与C# Decode方法相同的逻辑 if (hexString.length % 2 !== 0) { throw new Error("Hexadecimal string must have an even length"); } let bytes = []; for (let i = 0; i < hexString.length; i += 2) { bytes.push(parseInt(hexString.substr(i, 2), 16)); } return bytes; } function encodeBytesToHex(bytes) { // 实现与C# Encode方法相同的逻辑 let hexString = ''; for (let byte of bytes) { hexString += ('0' + byte.toString(16)).slice(-2); } return hexString; } module.exports = { SM4Encrypt_ECB, };