简单易用的cookie加密方法

在保存用户信息阶段,主要的工作是对用户的信息进行加密并保存到客户端。加密用户的信息是较为繁琐的,大致上可分为以下几个步聚:
① 得到用户名、经MD5加密后的用户密码、cookie有效时间(本文设置的是两星期,可根据自己需要修改)
② 自定义的一个webKey,这个Key是我们为自己的网站定义的一个字符串常量,这个可根据自己需要随意设置
③ 将上两步得到的四个值得新连接成一个新的字符串,再进行MD5加密,这样就得到了一个MD5明文字符串
④ 将用户名、cookie有效时间、MD5明文字符串使用“:”间隔连接起来,再对这个连接后的新字符串进行Base64编码

⑤ 设置一个cookieName,将cookieName和上一步产生的Base64编码写入到客户端。


其实弄明白了保存原理,读取及校验原理就很容易做了。读取和检验可以分为下面几个步骤:
① 根据设置的cookieName,得到cookieValue,如果值为空,就不帮用户进行自动登陆;否则执行读取方法
② 将cookieValue进行Base64解码,将取得的字符串以split(“:”)进行拆分,得到一个String数组cookieValues(此操作与保存阶段的第4步正好相反),这一步将得到三个值:
cookieValues[0] ---- 用户名
cookieValues[1] ---- cookie有效时间
cookieValues[2] ---- MD5明文字符串
③ 判断cookieValues的长度是否为3,如果不为3则进行错误处理。
④ 如果长度等于3,取出第二个,即cookieValues[1],此时将会得到有效时间(long型),将有效时间与服务器系统当前时间比较,如果小于当前时间,则说明cookie过期,进行错误处理。
⑤ 如果cookie没有过期,就取cookieValues[0],这样就可以得到用户名了,然后去数据库按用户名查找用户。
⑥ 如果上一步返回为空,进行错误处理。如果不为空,那么将会得到一个已经封装好用户信息的User实例对象user
⑦ 取出实例对象user的用户名、密码、cookie有效时间(即cookieValues[1])、webKey,然后将四个值连接起来,然后进行MD5加密,这样做也会得到一个MD5明文字符串(此操作与保存阶段的第3步类似)
⑧ 将上一步得到MD5明文与cookieValues[2]进行equals比较,如果是false,进行错误处理;如果是true,则将user对象添加到session中,帮助用户完成自动登陆



[csharp]  view plain  copy
 print ?
  1. using System;  
  2. using System.Web;  
  3.   
  4. namespace Mvc4WebBootstrap1.Models  
  5. {  
  6.     public class CookieController  
  7.     {  
  8.         private static String mystatickey = "Dazdingo";  
  9.         public static void CookieSetter(String username, int valuetime)  
  10.         {  
  11.             valuetime = 30;//暂时指定有效期为30天  
  12.             String todaystr = DateTime.Now.ToString("yyyyMMdd");  
  13.             String md5str = username + valuetime + todaystr + mystatickey;  
  14.             md5str = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(md5str, "MD5");  
  15.             String cookiestr = username + ":" + valuetime + ":" + todaystr + ":" + md5str;  
  16.             HttpCookie cookie = new HttpCookie(cookiestr);  
  17.             cookie.Name = "myweb.com";  
  18.             System.Web.HttpContext.Current.Response.Cookies.Add(cookie);  
  19.         }  
  20.         public static int CookieReader(String username)//0=no cookie 1=success 2=somewrong  
  21.         {  
  22.             username = "";  
  23.             if (System.Web.HttpContext.Current.Request.Cookies["MyCook"] == nullreturn 0;  
  24.             String cookiestr = System.Web.HttpContext.Current.Request.Cookies["myweb.com"].Value;  
  25.             String[] sarr = cookiestr.Split(new char[]{':'});  
  26.             username = sarr[0];  
  27.             String todaystr = DateTime.Now.ToString("yyyyMMdd");  
  28.             int cookiedate = int.Parse(sarr[2]);  
  29.             int todaydate = int.Parse(todaystr);  
  30.             int valuetime = int.Parse(sarr[1]);  
  31.             if ((todaydate - cookiedate) < valuetime) return 2;  
  32.             String md5str = sarr[0] + sarr[1] + sarr[2] + mystatickey;  
  33.             md5str = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(md5str, "MD5");  
  34.             if (md5str == sarr[3]) return 1;  
  35.             return 2;  
  36.         }  
  37.     }  
  38. }  

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值