///<summary>/// 加密字符
///</summary>///<param name=pToEncrypt>加密字符串</param>///<param name=skey>加密密钥</param>///<returns>返回加密</returns>publicclass DescMD5
{
publicstaticstring skey ="abcdefgh";
publicstring Skey
{
get { return skey; }
set { skey = value; }
}
///<summary>/// 加密函数
///</summary>///<param name="pToEncrypt"></param>///<returns></returns>publicstring EnCrypt(string pToEncrypt)
{
//访问数据加密标准(DES)算法的加密服务提供程序 (CSP) 版本的包装对象 DESCryptoServiceProvider des =new DESCryptoServiceProvider();
des.Key = System.Text.ASCIIEncoding.ASCII.GetBytes(skey);//建立加密对象的密钥和偏移量 des.IV = ASCIIEncoding.ASCII.GetBytes(skey); //原文使用ASCIIEncoding.ASCII方法的GetBytes方法byte[] inputbyteArray = Encoding.Default.GetBytes(pToEncrypt);//把字符串放到byte数组中 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);
}
return ret.ToString();
}
///<summary>/// 解密ESC函数
///</summary>///<param name="pToDecrypt">被解密的字符串</param>///<param name="sKey">密钥(只支持8个字节的密钥,同前面的加密密钥相同)</param>///<returns>返回被解密的字符串</returns>publicstring DeCrypt(string pToDecrypt)
{
DESCryptoServiceProvider des =new DESCryptoServiceProvider();
byte []inputbyteArray=newbyte[pToDecrypt.Length/2];
for (int i =0; i < pToDecrypt.Length /2; i++)
{
int x = Convert.ToInt32(pToDecrypt.Substring(i *2, 2), 16);
inputbyteArray[i] = (byte)x;
}
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();
return System.Text.Encoding.Default.GetString(ms.ToArray());
}
public DescMD5() { }
}