简单易用的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中,帮助用户完成自动登陆



using System;
using System.Web;

namespace Mvc4WebBootstrap1.Models
{
	public class CookieController
	{
		private static String mystatickey = "Dazdingo";
		public static void CookieSetter(String username, int valuetime)
		{
			valuetime = 30;//暂时指定有效期为30天
			String todaystr = DateTime.Now.ToString("yyyyMMdd");
			String md5str = username + valuetime + todaystr + mystatickey;
			md5str = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(md5str, "MD5");
			String cookiestr = username + ":" + valuetime + ":" + todaystr + ":" + md5str;
			HttpCookie cookie = new HttpCookie(cookiestr);
			cookie.Name = "myweb.com";
			System.Web.HttpContext.Current.Response.Cookies.Add(cookie);
		}
		public static int CookieReader(String username)//0=no cookie 1=success 2=somewrong
		{
			username = "";
			if (System.Web.HttpContext.Current.Request.Cookies["MyCook"] == null) return 0;
			String cookiestr = System.Web.HttpContext.Current.Request.Cookies["myweb.com"].Value;
			String[] sarr = cookiestr.Split(new char[]{':'});
			username = sarr[0];
			String todaystr = DateTime.Now.ToString("yyyyMMdd");
			int cookiedate = int.Parse(sarr[2]);
			int todaydate = int.Parse(todaystr);
			int valuetime = int.Parse(sarr[1]);
			if ((todaydate - cookiedate) < valuetime) return 2;
			String md5str = sarr[0] + sarr[1] + sarr[2] + mystatickey;
			md5str = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(md5str, "MD5");
			if (md5str == sarr[3]) return 1;
			return 2;
		}
	}
}


  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值