SignUtils.cs 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  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, long ts)
  30. {
  31. string value = StringUtils.SortJson(data);
  32. JObject jobject = new JObject();
  33. jobject.Add("appId", chnlId);
  34. jobject.Add("data", value);
  35. jobject.Add("encType", "SM4");
  36. jobject.Add("signType", "SM2");
  37. if (ts == 0L)
  38. {
  39. jobject.Add("timestamp", Convert.ToString(StringUtils.CurrentTimeStamp(true)));
  40. }
  41. else
  42. {
  43. jobject.Add("timestamp", Convert.ToString(ts));
  44. }
  45. jobject.Add("version", "2.0.1");
  46. return StringUtils.Json2sign(jobject.ToString(Formatting.None, null)) + "&key=" + sm4key;
  47. }
  48. // Token: 0x06000092 RID: 146 RVA: 0x00008A3C File Offset: 0x00006C3C
  49. public static string encryptMsg(string chnlId, string sm4key, string prvkey, string data, ref string rtSignPlain)
  50. {
  51. long num = StringUtils.CurrentTimeStamp(true);
  52. string signText = SignUtils.getSignText(chnlId, sm4key, data, num);
  53. string value = SignUtils.signSm3WithSm2(chnlId, sm4key, prvkey, signText);
  54. string value2 = SignUtils.sm4Encrypt(chnlId, sm4key, data);
  55. JObject jobject = new JObject();
  56. jobject.Add("appId", chnlId);
  57. jobject.Add("encData", value2);
  58. jobject.Add("encType", "SM4");
  59. jobject.Add("signData", value);
  60. jobject.Add("signType", "SM2");
  61. jobject.Add("timestamp", Convert.ToString(num));
  62. jobject.Add("version", "2.0.1");
  63. rtSignPlain = signText;
  64. return jobject.ToString(Formatting.None, null);
  65. }
  66. // Token: 0x06000093 RID: 147 RVA: 0x00008B08 File Offset: 0x00006D08
  67. public static string encryptMsg(string chnlId, string sm4key, string prvkey, string data)
  68. {
  69. long num = StringUtils.CurrentTimeStamp(true);
  70. string signText = SignUtils.getSignText(chnlId, sm4key, data, num);
  71. string value = SignUtils.signSm3WithSm2(chnlId, sm4key, prvkey, signText);
  72. string value2 = SignUtils.sm4Encrypt(chnlId, sm4key, data);
  73. return new JObject
  74. {
  75. {
  76. "appId",
  77. chnlId
  78. },
  79. {
  80. "encData",
  81. value2
  82. },
  83. {
  84. "encType",
  85. "SM4"
  86. },
  87. {
  88. "signData",
  89. value
  90. },
  91. {
  92. "signType",
  93. "SM2"
  94. },
  95. {
  96. "timestamp",
  97. Convert.ToString(num)
  98. },
  99. {
  100. "version",
  101. "2.0.1"
  102. }
  103. }.ToString(Formatting.None, null);
  104. }
  105. // Token: 0x06000094 RID: 148 RVA: 0x00008BD0 File Offset: 0x00006DD0
  106. public static string sm4Encrypt(string chnlId, string sm4key, string message)
  107. {
  108. byte[] bytes = Encoding.UTF8.GetBytes(chnlId.Substring(0, 16));
  109. byte[] bytes2 = Encoding.UTF8.GetBytes(sm4key);
  110. byte[] bytes3 = Encoding.UTF8.GetBytes(message);
  111. string text = Hex.ToHexString(GmUtil.Sm4EncryptECB(bytes, bytes2, "SM4/ECB/PKCS7Padding")).ToUpper();
  112. return Hex.ToHexString(GmUtil.Sm4EncryptECB(Encoding.UTF8.GetBytes(text.Substring(0, 16)), bytes3, "SM4/ECB/PKCS7Padding"));
  113. }
  114. // Token: 0x06000095 RID: 149 RVA: 0x00008C44 File Offset: 0x00006E44
  115. public static string sm4Decrypt(string chnlId, string sm4key, string message)
  116. {
  117. byte[] bytes = Encoding.UTF8.GetBytes(chnlId.Substring(0, 16));
  118. byte[] bytes2 = Encoding.UTF8.GetBytes(sm4key);
  119. byte[] cipher = Hex.Decode(message);
  120. string text = BitConverter.ToString(GmUtil.Sm4EncryptECB(bytes, bytes2, "SM4/ECB/PKCS7Padding"), 0).Replace("-", string.Empty).ToUpper();
  121. byte[] bytes3 = GmUtil.Sm4DecryptECB(Encoding.UTF8.GetBytes(text.Substring(0, 16)), cipher, "SM4/ECB/PKCS7Padding");
  122. return Encoding.UTF8.GetString(bytes3);
  123. }
  124. }
  125. }