zoukankan      html  css  js  c++  java
  • cookie读取中文时乱码

    先写入一个cookie;

    public static void SetCookie(string name, string value, int day)
    {
    name = Encrypt(name,"ToCookie");
    value = Encrypt(value, "ToCookie");
    HttpCookie cookie = new HttpCookie(name, value);
    cookie.Expires = DateTime.Now.AddDays(day);
    //判断是否存在,如果不存在就创建
    if (HttpContext.Current.Request.Cookies[name] == null)
    {
    HttpContext.Current.Response.SetCookie(cookie);
    }
    }

    然后读取一个cookie:

    public string GetCookie(string cookie)
    {
    cookie = CookieManager.Encrypt(cookie, "ToCookie");

    //判断是否存在
    if (Request.Cookies[cookie] != null)
    {

    return CookieManager.Decrypt(Request.Cookies[cookie].Value.ToString(), "ToCookie");
    }
    else
    {
    return "";
    }
    }

    cookie肯定也要加密

            #region DEC 加密过程

            /// <summary>

            /// 加密

            /// </summary>

            /// <param name="pToEncrypt"></param>

            /// <param name="sKey"></param>

            /// <returns></returns>

            public static string Encrypt(string pToEncrypt, string sKey)

            {

                DESCryptoServiceProvider des = new DESCryptoServiceProvider(); //把字符串放到byte数组中

                byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt);

                //byte[] inputByteArray=Encoding.Unicode.GetBytes(pToEncrypt);

                des.Key = ASCIIEncoding.ASCII.GetBytes(sKey); //建立加密对象的密钥和偏移量

                des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);  //原文使用ASCIIEncoding.ASCII方法的GetBytes方法

                MemoryStream ms = new MemoryStream();   //使得输入密码必须输入英文文本

                CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);

                cs.Write(inputByteArray, 0, inputByteArray.Length);

                cs.FlushFinalBlock();

                StringBuilder ret = new StringBuilder();

                foreach (byte b in ms.ToArray())

                {

                    ret.AppendFormat("{0:X2}", b);

                }

                ret.ToString();

                return ret.ToString();

            }

            #endregion

            #region  DEC 解密过程

            public static string Decrypt(string pToDecrypt, string sKey)

            {

                DESCryptoServiceProvider des = new DESCryptoServiceProvider();

                byte[] inputByteArray = new byte[pToDecrypt.Length / 2];

                for (int x = 0; x < pToDecrypt.Length / 2; x++)

                {

                    int i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16));

                    inputByteArray[x] = (byte)i;

                }

                des.Key = ASCIIEncoding.ASCII.GetBytes(sKey); //建立加密对象的密钥和偏移量,此值重要,不能修改

                des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);

                MemoryStream ms = new MemoryStream();

                CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);

                cs.Write(inputByteArray, 0, inputByteArray.Length);

                cs.FlushFinalBlock();

                StringBuilder ret = new StringBuilder(); //建立StringBuild对象,CreateDecrypt使用的是流对象,必须把解密后的文本变成流对象

                return System.Text.Encoding.Default.GetString(ms.ToArray());

            }

            ///其中的sKey非常重要,定义的时候定义成string然后赋值等于八个字母或数字,注意,必须8个

            ///这个也很实用,譬如你想进入文章页面,传入的参数的aid=10000

            ///这时把10000给加密

            ///然后接受的时候解密.这样能有效的防止sql注入攻击!!!?????

            #endregion


    经验在于积累----武二郎
  • 相关阅读:
    layout_weight使用
    Android sdk manager 下载速度慢的问题
    详谈OC(object-c)深浅复制/拷贝-什么情况下用retain和copy
    object-c(oc)内存管理机制详解
    xmpp实现的即时通讯聊天(二)
    xmpp实现的即时通讯聊天(一)
    iOS开发消息推送原理
    指定的转换无效。
    Oracle11g +Win 64+PLSQL9.0
    数据库连接字符串
  • 原文地址:https://www.cnblogs.com/zhanghai/p/4461178.html
Copyright © 2011-2022 走看看