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

[csharp] view plain copy

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;
}
}
}

			<script>
				(function(){
					function setArticleH(btnReadmore,posi){
						var winH = $(window).height();
						var articleBox = $("div.article_content");
						var artH = articleBox.height();
						if(artH > winH*posi){
							articleBox.css({
								'height':winH*posi+'px',
								'overflow':'hidden'
							})
							btnReadmore.click(function(){
								articleBox.removeAttr("style");
								$(this).parent().remove();
							})
						}else{
							btnReadmore.parent().remove();
						}
					}
					var btnReadmore = $("#btn-readmore");
					if(btnReadmore.length>0){
						if(currentUserName){
							setArticleH(btnReadmore,3);
						}else{
							setArticleH(btnReadmore,1.2);
						}
					}
				})()
			</script>
			</article>
上一篇:leecode-找出其中不含有重复字符的 最长子串 的长度


下一篇:用Python3写一个中国象棋游戏