首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 互联网 >

简略易用的cookie加密方法

2013-09-09 
简单易用的cookie加密方法在保存用户信息阶段,主要的工作是对用户的信息进行加密并保存到客户端。加密用户

简单易用的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;}}}


热点排行