SMUtil.cs 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. /*
  2. * @Description:
  3. * @Author: ylz-lichong
  4. * @Date: 2022-06-16 17:46:23
  5. */
  6. using Org.BouncyCastle.Utilities.Encoders;
  7. using System;
  8. using System.Text;
  9. using Newtonsoft.Json.Linq;
  10. using PTMedicalInsurance.Variables;
  11. namespace SM2Crypto.Lib
  12. {
  13. class SMUtil
  14. {
  15. /**
  16. * 加密
  17. *
  18. * @param data
  19. * @param appId
  20. * @param appSecret
  21. * @return
  22. */
  23. public static String encrypt(String data, String appId, String appSecret)
  24. {
  25. //加密流程
  26. //用appId加密appSecret获取新秘钥
  27. byte[] appSecretEncData = EasyGmUtils.sm4Encrypt(Encoding.UTF8.GetBytes(appId.Substring(0, 16)), Encoding.UTF8.GetBytes(appSecret));
  28. //新秘钥串
  29. byte[] secKey = Encoding.UTF8.GetBytes(Hex.ToHexString(appSecretEncData).ToUpper().Substring(0, 16));
  30. //加密0数据
  31. String encryptDataStr = Hex.ToHexString(EasyGmUtils.sm4Encrypt(secKey, Encoding.UTF8.GetBytes(data))).ToUpper();
  32. return encryptDataStr;
  33. }
  34. /**
  35. * 解密
  36. *
  37. * @param data
  38. * @param appId
  39. * @param appSecret
  40. * @return
  41. */
  42. public static String decrypt(String data, String appId, String appSecret)
  43. {
  44. byte[] appSecretEncDataDecode = EasyGmUtils.sm4Encrypt(Encoding.UTF8.GetBytes(appId.Substring(0, 16)), Encoding.UTF8.GetBytes(appSecret));
  45. byte[] secKeyDecode = Encoding.UTF8.GetBytes(Hex.ToHexString(appSecretEncDataDecode).ToUpper().Substring(0, 16));
  46. String decryptDataStr = Encoding.UTF8.GetString(EasyGmUtils.sm4Decrypt(secKeyDecode, Hex.Decode(data)));
  47. return decryptDataStr;
  48. }
  49. /**
  50. * 签名
  51. *
  52. * @param jsonObject
  53. * @param appSecret
  54. * @param privateKey
  55. * @return
  56. */
  57. public static String sign(JObject jsonObject, String appSecret, String privateKey)
  58. {
  59. // 获取签名串
  60. Global.writeLog("待签名串:" + SignUtil.getSignText(jsonObject, appSecret));
  61. byte[] signText = Encoding.UTF8.GetBytes(SignUtil.getSignText(jsonObject, appSecret));
  62. byte[] userId = Encoding.UTF8.GetBytes(appSecret);
  63. byte[] prvkey = Base64.Decode(privateKey);
  64. String responseSign = Base64.ToBase64String(EasyGmUtils.signSm3WithSm2(signText, userId, prvkey));
  65. return responseSign;
  66. }
  67. /**
  68. * 验签
  69. *
  70. * @param jsonObject
  71. * @param appSecret
  72. * @param publicKey
  73. * @param responseSign
  74. * @return
  75. */
  76. public static Boolean verify(JObject jsonObject, String appSecret, String publicKey, String responseSign)
  77. {
  78. //验签
  79. Global.writeLog("待验签串:" + SignUtil.getSignText(jsonObject, appSecret));
  80. byte[] msg = Encoding.UTF8.GetBytes(SignUtil.getSignText(jsonObject, appSecret));
  81. byte[] userIdDecode = Encoding.UTF8.GetBytes(appSecret);
  82. byte[] pubkey = Base64.Decode(publicKey);
  83. byte[] signData = Base64.Decode(responseSign);
  84. return EasyGmUtils.verifySm3WithSm2(msg, userIdDecode, signData, pubkey);
  85. }
  86. /**
  87. * 签名
  88. *
  89. * @param jsonObject
  90. * @param appSecret
  91. * @param privateKey
  92. * @return
  93. */
  94. public static String sign(String jsonString, String appSecret, String privateKey)
  95. {
  96. JObject jsonObject = (JObject)JObject.Parse(jsonString);
  97. // 获取签名串
  98. byte[] signText = Encoding.UTF8.GetBytes(SignUtil.getSignText(jsonObject, appSecret));
  99. byte[] userId = Encoding.UTF8.GetBytes(appSecret);
  100. byte[] prvkey = Base64.Decode(privateKey);
  101. String responseSign = Base64.ToBase64String(EasyGmUtils.signSm3WithSm2(signText, userId, prvkey));
  102. return responseSign;
  103. }
  104. /**
  105. * 验签
  106. *
  107. * @param jsonObject
  108. * @param appSecret
  109. * @param publicKey
  110. * @param responseSign
  111. * @return
  112. */
  113. public static Boolean verify(String jsonString, String appSecret, String publicKey, String responseSign)
  114. {
  115. JObject jsonObject = (JObject)JObject.Parse(jsonString);
  116. //验签
  117. byte[] msg = Encoding.UTF8.GetBytes(SignUtil.getSignText(jsonObject, appSecret));
  118. byte[] userIdDecode = Encoding.UTF8.GetBytes(appSecret);
  119. byte[] pubkey = Base64.Decode(publicKey);
  120. byte[] signData = Base64.Decode(responseSign);
  121. return EasyGmUtils.verifySm3WithSm2(msg, userIdDecode, signData, pubkey);
  122. }
  123. }
  124. }