using System;
using System.Security ;
using System.Security.Cryptography ;
using System.Diagnostics ;
using System.Web ;
using System.Text ;
using System.ComponentModel;
using System.Collections;public class jm  //加密解密类
{


/// <summary>
/// 转换string到Byte树组
/// </summary>
/// <param name="s">要转换的字符串</param>
/// <returns>转换的Byte数组</returns>
public  Byte[] StringToByteArray(String s)
{
/*
Char[] ca = s.ToCharArray();
Byte[] ba = new Byte[ca.Length];
for(int i=0; i<ba.Length; i++) ba[i] = (Byte)ca[i];
return ba;*/ return Encoding.UTF8.GetBytes(s) ;
} /// <summary>
/// 转换Byte数组到字符串
/// </summary>
/// <param name="a_arrByte">Byte数组</param>
/// <returns>字符串</returns>
public  string ByteArrayToString(Byte[] a_arrByte)
{
/*
//char[] ca = new char[a_arrByte.Length] ;
for(int i = 0 ; i < a_arrByte.Length ; i ++)
{
result += (char)a_arrByte[i] ;
}*/ return Encoding.UTF8.GetString(a_arrByte) ;
}
/// <summary>
/// 3des加密字符串
/// </summary>
/// <param name="a_strString">要加密的字符串</param>
/// <param name="a_strKey">密钥</param>
/// <returns>加密后并经base64编码的字符串</returns>
/// <res>静态方法,采用默认ascii编码</res>
public  string Encrypt3DES(string a_strString, string a_strKey) 
{
TripleDESCryptoServiceProvider DES = new TripleDESCryptoServiceProvider();
MD5CryptoServiceProvider hashMD5 = new MD5CryptoServiceProvider(); DES.Key = hashMD5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(a_strKey));
DES.Mode = CipherMode.ECB; ICryptoTransform DESEncrypt = DES.CreateEncryptor(); byte[] Buffer = ASCIIEncoding.ASCII.GetBytes(a_strString);
return Convert.ToBase64String(DESEncrypt.TransformFinalBlock(Buffer, 0, Buffer.Length));
}//end method /// <summary>
/// 3des加密字符串
/// </summary>
/// <param name="a_strString">要加密的字符串</param>
/// <param name="a_strKey">密钥</param>
/// <param name="encoding">编码方式</param>
/// <returns>加密后并经base63编码的字符串</returns>
/// <res>重载,指定编码方式</res>
public  string Encrypt3DES(string a_strString, string a_strKey , Encoding encoding) 
{
TripleDESCryptoServiceProvider DES = new TripleDESCryptoServiceProvider();
MD5CryptoServiceProvider hashMD5 = new MD5CryptoServiceProvider(); DES.Key = hashMD5.ComputeHash(encoding.GetBytes(a_strKey));
DES.Mode = CipherMode.ECB; ICryptoTransform DESEncrypt = DES.CreateEncryptor();
byte[] Buffer = encoding.GetBytes(a_strString);
return Convert.ToBase64String(DESEncrypt.TransformFinalBlock(Buffer, 0, Buffer.Length));
}
/// <summary>
/// 3des解密字符串
/// </summary>
/// <param name="a_strString">要解密的字符串</param>
/// <param name="a_strKey">密钥</param>
/// <returns>解密后的字符串</returns>
/// <exception cref="">密钥错误</exception>
/// <res>静态方法,采用默认ascii编码</res>
public  string Decrypt3DES(string a_strString, string a_strKey)
{
TripleDESCryptoServiceProvider DES = new
TripleDESCryptoServiceProvider();
MD5CryptoServiceProvider hashMD5 = new MD5CryptoServiceProvider(); DES.Key = hashMD5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(a_strKey));
DES.Mode = CipherMode.ECB; ICryptoTransform DESDecrypt = DES.CreateDecryptor(); string result = "";
try
{
byte[] Buffer = Convert.FromBase64String(a_strString);
result = ASCIIEncoding.ASCII.GetString(DESDecrypt.TransformFinalBlock(Buffer, 0, Buffer.Length));
}
catch(Exception e)
{
                #if DEBUG
Console.WriteLine("错误:{0}" , e) ;
                #endif//DEBUG
throw(new Exception("Invalid Key or input string is not a valid base64 string" , e)) ;
} return result ;
}//end method /// <summary>
/// 3des解密字符串
/// </summary>
/// <param name="a_strString">要解密的字符串</param>
/// <param name="a_strKey">密钥</param>
/// <param name="encoding">编码方式</param>
/// <returns>解密后的字符串</returns>
/// <exception cref="">密钥错误</exception>
/// <res>静态方法,指定编码方式</res>
public  string Decrypt3DES(string a_strString, string a_strKey , Encoding encoding)
{
TripleDESCryptoServiceProvider DES = new TripleDESCryptoServiceProvider();
MD5CryptoServiceProvider hashMD5 = new MD5CryptoServiceProvider(); DES.Key = hashMD5.ComputeHash(encoding.GetBytes(a_strKey));
DES.Mode = CipherMode.ECB; ICryptoTransform DESDecrypt = DES.CreateDecryptor(); string result = "";
try
{
byte[] Buffer = Convert.FromBase64String(a_strString);
result = encoding.GetString(DESDecrypt.TransformFinalBlock
(Buffer, 0, Buffer.Length));
}
catch(Exception e)
{
                #if DEBUG
Console.WriteLine("错误:{0}" , e) ;
                #endif//DEBUG
throw(new Exception("Invalid Key or input string is not a valid base64 string" , e)) ;
} return result ;
}//end method
}