采用TripleDES加密类给 cookie 进行加密

原创 2005年05月23日 09:48:00

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

C#(TripleDES)对应Java(3DES)加密工具类

3DES又称Triple DES,是DES加密算法的一种模式,它使用3条56位的密钥对3DES数据进行三次加密。 3DES加密过程为:C=Ek3(Dk2(Ek1(P))) 3DES解密过程...

JAVA加密解密之3DES(TripleDES)

3DES(或称为Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称。它相当于是对每个数据块应用三次DES加密算法。由于计...

TripleDES之C#和PHP之间加密解密

在C#常用加密解密一文中,介绍了几个加密解密方法,其中有个如何使用对称加密算法DES,此次说下DES的升级版,TripleDES。DES和TripleDES之间的关系可以参考下面的博文。 对称加密D...

WP8开发——TripleDES(3DES)加密算法

最近一个项目中需要运用到加密,由于当初这个项目是采用Java开发的,项目中就是采用的TripleDES加密算法,现在我想改为Windows版本(C#版本);C#语言倒是有TripleDES算法的实现,...

对称加密DES和TripleDES

一、 对称加密 对称加密,是一种比较传统的加密方式,其加密运算、解密运算使用的是同样的密钥,信息的发送者和信息的接收者在进行信息的传输与处理时,必须共同持有该密码(称为对称密码)。因此,通信双方都...

对称加密DES和TripleDES

  • 2015年02月14日 10:10
  • 54KB
  • 下载

c#MD5加密TripleDES加密解密封装

public static string EncMd5(string str) { //获取加密服务 System.Security...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:采用TripleDES加密类给 cookie 进行加密
举报原因:
原因补充:

(最多只允许输入30个字)