1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- // 假设我们有一个名为 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,
- };
|