| 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);        }    }}
 |