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>
标签:加密,String,处理,sarr,int,Cookie,cookieValues,cookie,MD5 来源: https://blog.csdn.net/qq_40144857/article/details/113536815