签名设计

一、

1、基础模板,Sign用户签名,TimeStamp暂时没用

[Serializable]
    public class BaseModel
    {
        public string Sign { get; set; }
        public string TimeStamp { get; set; }
        public string Code { get; set; }
    }

2、业务模板

[Serializable]
    public class CarInfo: BaseModel
    {
        public string LicenseNo { get; set; }
        public string FrameNo { get; set; }
        public string OwnerName { get; set; }
        public int Sex { get; set; }
        public string IdNo { get; set; }
    }

3、方法暂时没有整理,签名算法是字段键值对,并且排序&分割,最后拼接key,md5加密

[HttpPost]
        public JsonResult QueryCar(CarInfo car)
        {
            var propertys = car.GetType().GetProperties();
            SortedDictionary<string, string> dicParams = new SortedDictionary<string, string>();
            foreach(var pro in propertys)
            {
                if (pro.Name == "Sign" || pro.Name == "Code" ||pro.Name== "TimeStamp")
                    continue;
                var obj = pro.GetValue(car, null);
                if (obj == null)
                    continue;
                dicParams.Add(pro.Name, obj.ToString());
            }
            List<string> pList = new List<string>();
            foreach(var dic in dicParams)
            {
                pList.Add(dic.Key+"="+dic.Value);
            }
            string timeStamp=((int)(DateTime.Now- TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1))).TotalMinutes).ToString();
            string pStr = string.Join("&", pList.ToArray());// + "&TimeStamp" + timeStamp;
            string key = "fdafdahfgfsaaxg";
            string md5Str = MD5Helper.ComputeMD5(pStr, key, "utf-8").ToUpper();
            bool isChecked = false;
            if (md5Str == car.Sign)
                isChecked = true;
            var r = Json(new {msg= isChecked?"验证成功":"失败" });
            return r;
        }

4、模拟请求

public void Sign()
        {
            string url = "http://my.com/Api/MyData/QueryCar";
            var data = new {
                LicenseNo= "冀J566RX",
                FrameNo= "LBEHDAEB7CY835913",
                OwnerName= "周后欣",
                Sex=1,
                IdNo= "371323198008048124",
                Sign= "F42FF92A0079BC503D13461F610CF786",
                Code="10008",
                TimeStamp= "25470068"
            };
            string dataStr = "FrameNo=LBEHDAEB7CY835913&IdNo=371323198008048124&LicenseNo=冀J566RX&OwnerName=周后欣&Sex=1";
            string str =JsonConvert.SerializeObject(data);
            string r = HttpHelper.Instance.HttpPost(url,str);
            Console.WriteLine(r);
        }

 

posted @ 2018-06-06 12:18  wjl910  阅读(177)  评论(0)    收藏  举报