123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- /*
- * @Description:
- * @Author: ylz-lichong
- * @Date: 2022-06-16 17:46:23
- */
- using Org.BouncyCastle.Utilities.Encoders;
- using System;
- using System.Text;
- using Newtonsoft.Json.Linq;
- using PTMedicalInsurance.Variables;
- namespace SM2Crypto.Lib
- {
- class SMUtil
- {
- /**
- * 加密
- *
- * @param data
- * @param appId
- * @param appSecret
- * @return
- */
- public static String encrypt(String data, String appId, String appSecret)
- {
- //加密流程
- //用appId加密appSecret获取新秘钥
- byte[] appSecretEncData = EasyGmUtils.sm4Encrypt(Encoding.UTF8.GetBytes(appId.Substring(0, 16)), Encoding.UTF8.GetBytes(appSecret));
- //新秘钥串
- byte[] secKey = Encoding.UTF8.GetBytes(Hex.ToHexString(appSecretEncData).ToUpper().Substring(0, 16));
- //加密0数据
- String encryptDataStr = Hex.ToHexString(EasyGmUtils.sm4Encrypt(secKey, Encoding.UTF8.GetBytes(data))).ToUpper();
- return encryptDataStr;
- }
- /**
- * 解密
- *
- * @param data
- * @param appId
- * @param appSecret
- * @return
- */
- public static String decrypt(String data, String appId, String appSecret)
- {
- byte[] appSecretEncDataDecode = EasyGmUtils.sm4Encrypt(Encoding.UTF8.GetBytes(appId.Substring(0, 16)), Encoding.UTF8.GetBytes(appSecret));
- byte[] secKeyDecode = Encoding.UTF8.GetBytes(Hex.ToHexString(appSecretEncDataDecode).ToUpper().Substring(0, 16));
- String decryptDataStr = Encoding.UTF8.GetString(EasyGmUtils.sm4Decrypt(secKeyDecode, Hex.Decode(data)));
- return decryptDataStr;
- }
- /**
- * 签名
- *
- * @param jsonObject
- * @param appSecret
- * @param privateKey
- * @return
- */
- public static String sign(JObject jsonObject, String appSecret, String privateKey)
- {
- // 获取签名串
- Global.writeLog("待签名串:" + SignUtil.getSignText(jsonObject, appSecret));
- byte[] signText = Encoding.UTF8.GetBytes(SignUtil.getSignText(jsonObject, appSecret));
- byte[] userId = Encoding.UTF8.GetBytes(appSecret);
- byte[] prvkey = Base64.Decode(privateKey);
- String responseSign = Base64.ToBase64String(EasyGmUtils.signSm3WithSm2(signText, userId, prvkey));
- return responseSign;
- }
- /**
- * 验签
- *
- * @param jsonObject
- * @param appSecret
- * @param publicKey
- * @param responseSign
- * @return
- */
- public static Boolean verify(JObject jsonObject, String appSecret, String publicKey, String responseSign)
- {
- //验签
- Global.writeLog("待验签串:" + SignUtil.getSignText(jsonObject, appSecret));
- byte[] msg = Encoding.UTF8.GetBytes(SignUtil.getSignText(jsonObject, appSecret));
- byte[] userIdDecode = Encoding.UTF8.GetBytes(appSecret);
- byte[] pubkey = Base64.Decode(publicKey);
- byte[] signData = Base64.Decode(responseSign);
- return EasyGmUtils.verifySm3WithSm2(msg, userIdDecode, signData, pubkey);
- }
- /**
- * 签名
- *
- * @param jsonObject
- * @param appSecret
- * @param privateKey
- * @return
- */
- public static String sign(String jsonString, String appSecret, String privateKey)
- {
- JObject jsonObject = (JObject)JObject.Parse(jsonString);
- // 获取签名串
- byte[] signText = Encoding.UTF8.GetBytes(SignUtil.getSignText(jsonObject, appSecret));
- byte[] userId = Encoding.UTF8.GetBytes(appSecret);
- byte[] prvkey = Base64.Decode(privateKey);
- String responseSign = Base64.ToBase64String(EasyGmUtils.signSm3WithSm2(signText, userId, prvkey));
- return responseSign;
- }
- /**
- * 验签
- *
- * @param jsonObject
- * @param appSecret
- * @param publicKey
- * @param responseSign
- * @return
- */
- public static Boolean verify(String jsonString, String appSecret, String publicKey, String responseSign)
- {
- JObject jsonObject = (JObject)JObject.Parse(jsonString);
- //验签
- byte[] msg = Encoding.UTF8.GetBytes(SignUtil.getSignText(jsonObject, appSecret));
- byte[] userIdDecode = Encoding.UTF8.GetBytes(appSecret);
- byte[] pubkey = Base64.Decode(publicKey);
- byte[] signData = Base64.Decode(responseSign);
- return EasyGmUtils.verifySm3WithSm2(msg, userIdDecode, signData, pubkey);
- }
- }
- }
|