SM4Exten.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. // 假设我们有一个名为 sm4 的模块,它提供了加密功能
  2. const sm4 = require('sm-crypto'); // 这里需要替换为实际的路径或库名
  3. function SM4Encrypt_ECB(plainText, secretKey, hexString = false) {
  4. const sm4Context = {
  5. isPadding: true,
  6. mode: 'encrypt', // 使用加密模式
  7. };
  8. let key;
  9. if (!hexString) {
  10. key = wx.arrayBufferToBase64(new TextEncoder().encode(secretKey));
  11. } else {
  12. key = decodeHexString(secretKey); // 需要自己实现decodeHexString函数
  13. }
  14. // 设置加密密钥
  15. sm4.setKey(sm4Context, key);
  16. // 加密数据
  17. const encryptedData = sm4.encryptECB(sm4Context, new TextEncoder().encode(plainText));
  18. // 返回编码后的结果
  19. return encodeBytesToHex(encryptedData);
  20. }
  21. function decodeHexString(hexString) {
  22. // 实现与C# Decode方法相同的逻辑
  23. if (hexString.length % 2 !== 0) {
  24. throw new Error("Hexadecimal string must have an even length");
  25. }
  26. let bytes = [];
  27. for (let i = 0; i < hexString.length; i += 2) {
  28. bytes.push(parseInt(hexString.substr(i, 2), 16));
  29. }
  30. return bytes;
  31. }
  32. function encodeBytesToHex(bytes) {
  33. // 实现与C# Encode方法相同的逻辑
  34. let hexString = '';
  35. for (let byte of bytes) {
  36. hexString += ('0' + byte.toString(16)).slice(-2);
  37. }
  38. return hexString;
  39. }
  40. module.exports = {
  41. SM4Encrypt_ECB,
  42. };