天天看点

C#中cookie读写加密中文字符

C#中cookie读写加密中文字符
C#中cookie读写加密中文字符

代码

//加密  Cookies

Response.Cookies["askCRM"]["USERID"] = Tools.Encrypt(strUserName.Trim(), Tools.myKey);

//解密

string strUid = Request.Cookies["askCRM"]["USERID"];

strUid = Tools.Decrypt(strUid, Tools.myKey);

加密解密 掉用的方法

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

using System.Security.Cryptography;

using System.IO;

using System.Text;

/// <summary>

/// Tools 的摘要说明

/// </summary>

public class Tools

{

    /// <summary>

    /// 当前程序加密所使用的密钥

    /// </summary>

    public static readonly string myKey = "q0m3sd8l";

    #region 加密方法

    /// 加密方法

    /// <param name="pToEncrypt">需要加密字符串</param>

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

    /// <returns>加密后的字符串</returns>

    public static string Encrypt(string pToEncrypt, string sKey)

    {

        try

        {

            DESCryptoServiceProvider des = new DESCryptoServiceProvider();

            //把字符串放到byte数组中

            //原来使用的UTF8编码,我改成Unicode编码了,不行

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

            //建立加密对象的密钥和偏移量

            //使得输入密码必须输入英文文本

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

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

            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();

        }

        catch (Exception ex)

            JS.Alert("写入配置信息失败,详细信息:" + ex.Message.Replace("\r\n", "").Replace("'", ""));

        return "";

    }

    #endregion

    #region 解密方法

    /// 解密方法

    /// <param name="pToDecrypt">需要解密的字符串</param>

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

    /// <returns>解密后的字符串</returns>

    public static string Decrypt(string pToDecrypt, string sKey)

            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;

            //建立加密对象的密钥和偏移量,此值重要,不能修改

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

            //建立StringBuild对象,CreateDecrypt使用的是流对象,必须把解密后的文本变成流对象

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

            JS.Alert("读取配置信息失败,详细信息:" + ex.Message.Replace("\r\n", "").Replace("'", ""));

}