SignUtils.cs 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. using System;
  2. using System.Text;
  3. using Newtonsoft.Json;
  4. using Newtonsoft.Json.Linq;
  5. using Org.BouncyCastle.Crypto;
  6. using Org.BouncyCastle.Crypto.Parameters;
  7. using Org.BouncyCastle.Math;
  8. using Org.BouncyCastle.Utilities.Encoders;
  9. namespace AnHuiMI.Common
  10. {
  11. class SignUtils
  12. {
  13. // Token: 0x0600008F RID: 143 RVA: 0x000088EC File Offset: 0x00006AEC
  14. public static string signSm3WithSm2(string chnlId, string sm4key, string prvkey, string data)
  15. {
  16. ECPrivateKeyParameters privatekeyFromD = GmUtil.GetPrivatekeyFromD(new BigInteger(Convert.FromBase64String(prvkey)));
  17. return Convert.ToBase64String(GmUtil.SignSm3WithSm2(Encoding.UTF8.GetBytes(data), Encoding.UTF8.GetBytes(sm4key), privatekeyFromD));
  18. }
  19. // Token: 0x06000090 RID: 144 RVA: 0x0000892C File Offset: 0x00006B2C
  20. public static bool verifySm3WithSm2(string msg, string sm4key, string signData, string pubKey)
  21. {
  22. byte[] array = Convert.FromBase64String(pubKey);
  23. BitConverter.ToString(array);
  24. AsymmetricKeyParameter publickeyFromXY = GmUtil.GetPublickeyFromXY(array);
  25. byte[] rs = Convert.FromBase64String(signData);
  26. return GmUtil.VerifySm3WithSm2(Encoding.UTF8.GetBytes(msg), Encoding.UTF8.GetBytes(sm4key), rs, publickeyFromXY);
  27. }
  28. // Token: 0x06000091 RID: 145 RVA: 0x00008970 File Offset: 0x00006B70
  29. public static string getSignText(string chnlId, string sm4key, string data,string ts)
  30. {
  31. JObject jobject = new JObject();
  32. jobject.Add("appId", chnlId);
  33. jobject.Add("data", JObject.Parse(data));
  34. jobject.Add("encType", "SM4");
  35. jobject.Add("signType", "SM2");
  36. jobject.Add("timestamp", ts); ;
  37. jobject.Add("version", "2.0.1");
  38. string value = StringUtils.SortJson(jobject.ToString(Formatting.None, null));
  39. return StringUtils.Json2sign(value) + "&key=" + sm4key;
  40. }
  41. // Token: 0x06000092 RID: 146 RVA: 0x00008A3C File Offset: 0x00006C3C
  42. public static string encryptMsg(string chnlId, string sm4key, string prvkey, string data, ref string rtSignPlain)
  43. {
  44. string ts = DateTime.Now.ToString("yyyyMMddHHmmss");
  45. string signText = SignUtils.getSignText(chnlId, sm4key, data,ts);
  46. string signData = SignUtils.signSm3WithSm2(chnlId, sm4key, prvkey, signText);
  47. string encData = SignUtils.sm4Encrypt(chnlId, sm4key, data);
  48. JObject jobject = new JObject();
  49. jobject.Add("appId", chnlId);
  50. jobject.Add("encData", encData);
  51. jobject.Add("encType", "SM4");
  52. jobject.Add("signData", signData);
  53. jobject.Add("signType", "SM2");
  54. jobject.Add("timestamp", ts);
  55. jobject.Add("version", "2.0.1");
  56. rtSignPlain = signData;
  57. return jobject.ToString(Formatting.None, null);
  58. }
  59. // Token: 0x06000093 RID: 147 RVA: 0x00008B08 File Offset: 0x00006D08
  60. public static string encryptMsg(string chnlId, string sm4key, string prvkey, string data)
  61. {
  62. string ts = DateTime.Now.ToString("yyyyMMddHHmmss");
  63. string signText = SignUtils.getSignText(chnlId, sm4key, data, ts);
  64. string value = SignUtils.signSm3WithSm2(chnlId, sm4key, prvkey, signText);
  65. string value2 = SignUtils.sm4Encrypt(chnlId, sm4key, data);
  66. return new JObject
  67. {
  68. {
  69. "appId",
  70. chnlId
  71. },
  72. {
  73. "encData",
  74. value2
  75. },
  76. {
  77. "encType",
  78. "SM4"
  79. },
  80. {
  81. "signData",
  82. value
  83. },
  84. {
  85. "signType",
  86. "SM2"
  87. },
  88. {
  89. "timestamp",
  90. ts
  91. },
  92. {
  93. "version",
  94. "2.0.1"
  95. }
  96. }.ToString(Formatting.None, null);
  97. }
  98. // Token: 0x06000094 RID: 148 RVA: 0x00008BD0 File Offset: 0x00006DD0
  99. public static string sm4Encrypt(string chnlId, string sm4key, string message)
  100. {
  101. byte[] bytes = Encoding.UTF8.GetBytes(chnlId.Substring(0, 16));
  102. byte[] bytes2 = Encoding.UTF8.GetBytes(sm4key);
  103. byte[] bytes3 = Encoding.UTF8.GetBytes(message);
  104. string text = Hex.ToHexString(GmUtil.Sm4EncryptECB(bytes, bytes2, "SM4/ECB/PKCS7Padding")).ToUpper();
  105. return Hex.ToHexString(GmUtil.Sm4EncryptECB(Encoding.UTF8.GetBytes(text.Substring(0, 16)), bytes3, "SM4/ECB/PKCS7Padding"));
  106. }
  107. // Token: 0x06000095 RID: 149 RVA: 0x00008C44 File Offset: 0x00006E44
  108. public static string sm4Decrypt(string chnlId, string sm4key, string message)
  109. {
  110. byte[] bytes = Encoding.UTF8.GetBytes(chnlId.Substring(0, 16));
  111. byte[] bytes2 = Encoding.UTF8.GetBytes(sm4key);
  112. byte[] cipher = Hex.Decode(message);
  113. string text = BitConverter.ToString(GmUtil.Sm4EncryptECB(bytes, bytes2, "SM4/ECB/PKCS7Padding"), 0).Replace("-", string.Empty).ToUpper();
  114. byte[] bytes3 = GmUtil.Sm4DecryptECB(Encoding.UTF8.GetBytes(text.Substring(0, 16)), cipher, "SM4/ECB/PKCS7Padding");
  115. return Encoding.UTF8.GetString(bytes3);
  116. }
  117. }
  118. }