/* * @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); } } }