採用TripleDES加密類給 cookie 進行加密

using System;
using System.Security;
using System.Security.Cryptography;
using System.Diagnostics;
using System.Text;
using System.IO;
using System.Web;

namespace PSMCryptoUtil
{
 /// <summary>
 /// 採用 TripleDES 加密
 /// 捷 2005-5-23
 /// CryptoUtil 的摘要說明。
 /// </summary>
 public class CryptoUtil
 {
  //對TripleDES,採取24字節或192位的密鑰和初始向量
  private static byte[] Key_192 ;
  private static byte[] IV_192 ;
  public CryptoUtil()
  {
   if(Key_192 == null)
   {
    Key_192 = CreateByte(24);
   }
   if(IV_192 == null)
   {
    IV_192 = CreateByte(24);
   }
  }
  public CryptoUtil(byte[] K,byte[] V)
  {
   Key = K;
   IV = V;
  }
  public byte[] Key
  {
   get{return Key_192;}
   set{Key_192 = value;}
  }
  public byte[] IV
  {
   get{return IV_192;}
   set{IV_192 = value;}
  }
  /// <summary>
  /// 加密
  /// </summary>
  /// <param name="values"></param>
  /// <returns></returns>
  public string EnCrypt(string values)
  {
   string rstr = "";
   string v = values;
   if(values.Length > 0)
   {
    TripleDESCryptoServiceProvider cryptoP = new TripleDESCryptoServiceProvider();
    MemoryStream ms = new MemoryStream();
    CryptoStream cs = new CryptoStream(ms,cryptoP.CreateEncryptor(Key_192,IV_192),CryptoStreamMode.Write);
    StreamWriter sw = new StreamWriter(cs);
    sw.Write(v);
    sw.Flush();
    cs.FlushFinalBlock();
    ms.Flush();
    rstr = Convert.ToBase64String(ms.GetBuffer(),0,Convert.ToInt32(ms.Length));
    rstr = HttpUtility.UrlEncode(rstr);
   }
   return rstr;
  }
  /// <summary>
  /// 解密
  /// </summary>
  /// <param name="values"></param>
  /// <returns></returns>
  public string DeCrypt(string values)
  {
   string rstr = "";
   string v = values;
   if(values == null)
   {
    return rstr;
   }
   if(values.Length > 0)
   {
    v = HttpUtility.UrlDecode(v);
    TripleDESCryptoServiceProvider cryptoP = new TripleDESCryptoServiceProvider();
    byte[] buffer = Convert.FromBase64String(v);
    MemoryStream ms = new MemoryStream(buffer);
    CryptoStream cs = new CryptoStream(ms,cryptoP.CreateDecryptor(Key_192,IV_192),CryptoStreamMode.Read);
    StreamReader sr = new StreamReader(cs);
    rstr = sr.ReadToEnd();
    ms.Flush();
    cs.Flush();
    sr = null;
   }
   return rstr;
  }
  /// <summary>
  /// 取得密匙
  /// </summary>
  /// <param name="len"></param>
  /// <returns></returns>
  private byte[] CreateByte(int len)
  {
   byte[] random = new Byte[len];
   System.Security.Cryptography.RNGCryptoServiceProvider rng = new System.Security.Cryptography.RNGCryptoServiceProvider();
   rng.GetBytes(random);
   return random;
  }
 }
}

using System;
using System.Web;
using System.Text;

namespace PSMCookieUtil
{
 /// <summary>
 /// CookieUtil 的摘要說明。
 /// 用 PSMCryptoUtil 對 cookie 進行加密
 /// 捷 2005-5-23
 /// </summary>
 public class CookieUtil
 {
  private string _CookieName = "PSManage";

  public string CookieName
  {
   get{return _CookieName;}
   set{_CookieName = value;}
  }
  public CookieUtil()
  {
  }
  public CookieUtil(string cookiename)
  {
   CookieName = cookiename;
  }
  /// <summary>
  /// 取得鍵爲 key 的 Cookie 值
  /// </summary>
  /// <param name="key"></param>
  /// <returns></returns>
  public string GetCookieValue(string key)
  {
   string rstr = "";
   PSMCryptoUtil.CryptoUtil cutil = new PSMCryptoUtil.CryptoUtil();
   string dekey = cutil.EnCrypt(key);
   if(HttpContext.Current.Request.Cookies[_CookieName] != null)
   {
    rstr = HttpContext.Current.Request.Cookies[_CookieName][dekey];
    rstr = cutil.DeCrypt(rstr);
   }
   return rstr;
  }
  public void SetCookie(string key,string values)
  {
   HttpCookie cookie = null;
   string k,v;
   PSMCryptoUtil.CryptoUtil cutil = new PSMCryptoUtil.CryptoUtil();
   k = cutil.EnCrypt(key);
   v = cutil.EnCrypt(values);
   if(HttpContext.Current.Request.Cookies[_CookieName] == null)
   {
    cookie = new HttpCookie(_CookieName);
   }
   else
   {
    cookie = HttpContext.Current.Request.Cookies[_CookieName];
   }
   cookie[k] = v;
   HttpContext.Current.Response.AppendCookie(cookie);
  }
 }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章