博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
web api 安全
阅读量:7067 次
发布时间:2019-06-28

本文共 4309 字,大约阅读时间需要 14 分钟。

这方面的文章已经有很多了,我只是记录一下自己在项目中应用的具体实现

客户端

1  DateTime t = DateTime.Now;2             long timeStamp = SignHelper.ConvertDateTimeInt(t);3             var param = new SortedDictionary
();4 param.Add("id=", id);5 param.Add("timeStamp=", timeStamp.ToString());6 string pwdKey = "***";7 var sign = SignHelper.GetSign(param, pwdKey);8 TempData["path"] = "Authorize?id=" + id + "&sign="+sign + "&timeStamp="+timeStamp;9 return View();

服务端

DateTime requestTime =                 SignHelper.GetDateTimeByTicks(timeStamp.ToString());            if (requestTime.AddMinutes(20) < DateTime.Now)            {                TempData["msg"] = "请求超时";                return View("../Home/Error");            }            var param = new SortedDictionary
(); param.Add("id=", id); param.Add("timeStamp=", timeStamp.ToString()); string pwdKey = "****"; var _sign = SignHelper.GetSign(param, pwdKey); if (sign != _sign) { TempData["msg"] = "非法登录"; return View("../Home/Error"); } SysUserEntity userEntity = new SysUserEntity(); try { userEntity = new UserApp().CheckUser(id); } catch (Exception ex) { TempData["msg"] = ex.Message; return View("../Home/Error"); }

  SignHelper 类:

1  public class SignHelper 2     { 3         public static string GetSign(SortedDictionary
paramList, string appKey) 4 { 5 paramList.Remove("_sign"); 6 StringBuilder sb = new StringBuilder(); 7 foreach (var p in paramList) 8 sb.Append(p.Key).Append(p.Value); 9 sb.Append(appKey);10 return GetMD5(sb.ToString());11 }12 public static string GetMD5(string str)13 {14 if (string.IsNullOrEmpty(str))15 return str;16 var sb = new StringBuilder(32);17 var md5 = System.Security.Cryptography.MD5.Create();18 var output = md5.ComputeHash(Encoding.UTF8.GetBytes(str));19 for (int i = 0; i < output.Length; i++)20 sb.Append(output[i].ToString("x").PadLeft(2, '0'));21 return sb.ToString();22 }23 24 public static DateTime GetDateTimeByTicks(string timeStamp)25 {26 DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));27 long lTime = long.Parse(timeStamp + "0000");28 TimeSpan toNow = new TimeSpan(lTime);29 return dtStart.Add(toNow);30 }31 32 public static int ConvertDateTimeInt(DateTime time)33 {34 System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));35 return (int)(time - startTime).TotalSeconds;36 }37 38 39 }

md5 类:

1 ///  2     /// MD5加密 3     ///  4     public class Md5 5     { 6         ///  7         /// MD5加密 8         ///  9         /// 加密字符10         /// 加密位数16/3211         /// 
12 public static string md5(string str, int code)13 {14 string strEncrypt = string.Empty;15 if (code == 16)16 {17 strEncrypt = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str, "MD5").Substring(8, 16);18 }19 20 if (code == 32)21 {22 strEncrypt = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str, "MD5");23 }24 25 return strEncrypt;26 }27 28 public static string GetMD5(string str)29 {30 if (string.IsNullOrEmpty(str))31 return str;32 var sb = new StringBuilder(32);33 var md5 = System.Security.Cryptography.MD5.Create();34 var output = md5.ComputeHash(Encoding.UTF8.GetBytes(str));35 for (int i = 0; i < output.Length; i++)36 sb.Append(output[i].ToString("X").PadLeft(2, '0'));37 return sb.ToString();38 }39 }

 

转载于:https://www.cnblogs.com/bayu/p/8628604.html

你可能感兴趣的文章
[Android Pro] AndroidX重构和映射
查看>>
栈练习1,2,3
查看>>
WebLoad 解析服务器返回的XML格式内容
查看>>
生产者与消费者问题 之锁的顺序
查看>>
mvvm
查看>>
树状数组小结
查看>>
走进windows编程的世界-----消息处理函数(3)
查看>>
UIPickerView的使用
查看>>
hdu 5348 MZL&#39;s endless loop
查看>>
MAC 通过brew安装软件
查看>>
非对称加密(RSA、DH密钥交换算法、数字签名)
查看>>
vue的路由传值query方法
查看>>
tornado学习笔记(一)
查看>>
win7开WIFI热点, xrdp远程, zsh 主题乱码, watchdog启用, 在线Linux内核, WebRTC
查看>>
EZOJ #257
查看>>
浅谈MySQL中的查询优化
查看>>
PYTHON RE正则表达式
查看>>
QT中定时器的使用方法
查看>>
Prototype 原型模式
查看>>
本地Git仓库和远程仓库的创建及关联
查看>>