C# + Vue3采用SM4

引用 

   类库:

  

 调用:

1
2
var encrypt = SM4Util_New.EncryptEcb(SM4_KEY, "[{\"id\":\"4c5849f2.4369f8\",\"type\":\"tab\",\"label\":\"1111\",\"disabled\":false,\"info\":\"\"}]");
var decrypt = SM4Util_New.DecryptEcb(SM4_KEY,encrypt );

    密钥生成方法: 

1
var SM4_KEY = Guid.NewGuid().ToString("N");//生成key 32位 16进制字符串

 解密方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public static String decrypt()
{
    var iv = Hex.Decode("fedcba98765432100123456789abcdef");
    //byte[] plain = Hex.Decode("0123456789abcdeffedcba98765432100123456789abcdeffedcba98765432100123456789abcdeffedcba9876543210");
    byte[] key = Hex.Decode("0123456789abcdeffedcba9876543210");
    var base64Str = Base64Util.Base64Decrypt("MGQ2Y2ZhNzNjODIzYjJhYzBkNmE5MmM1NjQxNzE4OTJmYTk1ZmE0Yjc1OTEwMzIwMjBjNGFhNDlkMmI0MmJjNQ==");
    byte[] cipher = Hex.Decode(base64Str);
    var bs = GmUtil.Sm4DecryptCBC(key, cipher, iv, GmUtil.SM4_CBC_PKCS7PADDING);
 
    var encrypt = Encoding.UTF8.GetString(bs);
    System.Console.Out.WriteLine(encrypt);
    return encrypt;
    //log.Info("testSm4EncEcb: " + Hex.ToHexString(bs)); ;
    //bs = Sm4DecryptECB(key, bs, GmUtil.SM4_ECB_NOPADDING);
}

Vue3

npm install --save sm-crypto

--https://www.npmjs.com/package/sm-crypto

npm install --save js-base64

1
2
import { sm4, sm3, sm2 } from "sm-crypto";
import { Base64 } from "js-base64";
 

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
function doDecryptSm4() {
  const encryptData =
    "1118b5cec13c3bcd39e7006f9c155017948d2025fe716b45746e9b04559e77d52f2345cf9d1cf55abee0adca8f971a0693a7ea8a26f67a377a24a26a8d5f60c4f5c145149bd4de7144bbb1093374549f3c813d0b36b2284e33aacac91e5d2f62";
  const key = "8abf369903e94857bcadbcf7068d68e3";
  let decryptData = sm4.decrypt(encryptData, key); // 解密,不使用 padding
  console.log(decryptData);
  console.log(Base64.encode(decryptData));
}
function doEncryptSm4() {
  //后端返回的数据格式
  var json = [
    {
      id: "4c5849f2.4369f8",
      type: "tab",
      label: "1111",
      disabled: false,
      info: "",
    },
  ];
 
  const escapedJson = JSON.stringify(json);
  console.log(escapedJson);
  const msg = escapedJson;
  //"{'urlquerystring':'partner=XunChaApplet&channel=ApiApplet&clientversion=1.0&timestamp=1701956563','Sign':'0aa77898ea0181d2c0addbaff953a633'}"; // 可以为 utf8 串或字节数组
  const key = "8abf369903e94857bcadbcf7068d68e3"; // 可以为 16 进制串或字节数组,要求为 128 比特
  let encryptData = sm4.encrypt(msg, key); // 加密,默认输出 16 进制字符串,默认使用 pkcs#7 填充(传 pkcs#5 也会走 pkcs#7 填充) 默认走 ECB 模式
  //let encryptData = sm4.encrypt(msg, key, {padding: 'none'}) // 加密,不使用 padding
  //let encryptData = sm4.encrypt(msg, key, {padding: 'none', output: 'array'}) // 加密,不使用 padding,输出为字节数组
  //let encryptData = sm4.encrypt(msg, key, { mode: "cbc",iv: "fedcba98765432100123456789abcdef", }); // 加密,cbc 模式 默认使用 pkcs#7 填充
  console.log(encryptData);
  console.log(Base64.encode(encryptData));
}

  

posted @   流氓大菠萝  阅读(382)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示