//名称空间 
using System; 
using System.Security.Cryptography; 
using System.IO; 
using System.Text; 
 
//方法 
//加密方法 
public string Encrypt(string pToEncrypt, string sKey) 

DESCryptoServiceProvider des 
= new DESCryptoServiceProvider(); 
//把字符串放到byte数组中 
//原来使用的UTF8编码,我改成Unicode编码了,不行 
byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt); 
//byte[] inputByteArray=Encoding.Unicode.GetBytes(pToEncrypt); 
 
//建立加密对象的密钥和偏移量 
//原文使用ASCIIEncoding.ASCII方法的GetBytes方法 
//使得输入密码必须输入英文文本 
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); 
//Write the byte array into the crypto stream 
//(It will end up in the memory stream) 
cs.Write(inputByteArray, 0, inputByteArray.Length); 
cs.FlushFinalBlock(); 
//Get the data back from the memory stream, and into a string 
StringBuilder ret = new StringBuilder(); 
foreach(byte b in ms.ToArray()) 

//Format as hex 
ret.AppendFormat("{0:X2}", b); 
}
 
ret.ToString(); 
return ret.ToString(); 
}
 
 
//解密方法 
public string Decrypt(string pToDecrypt, string sKey) 

DESCryptoServiceProvider des 
= new DESCryptoServiceProvider(); 
 
//Put the input string into the byte array 
byte[] inputByteArray = new byte[pToDecrypt.Length / 2]; 
for(int x = 0; x < pToDecrypt.Length / 2; x++

int i = (Convert.ToInt32(pToDecrypt.Substring(x * 22), 16)); 
inputByteArray[x] 
= (byte)i; 
}
 
 
//建立加密对象的密钥和偏移量,此值重要,不能修改 
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); 
//Flush the data through the crypto stream into the memory stream 
cs.Write(inputByteArray, 0, inputByteArray.Length); 
cs.FlushFinalBlock(); 
 
//Get the decrypted data back from the memory stream 
//建立StringBuild对象,CreateDecrypt使用的是流对象,必须把解密后的文本变成流对象 
StringBuilder ret = new StringBuilder(); 
 
return System.Text.Encoding.Default.GetString(ms.ToArray()); 
}
 
 
//-------代码完毕--------------------
注意:sKey输入密码的时候,必须使用英文字符,区分大小写,且字符数量是8个,不能多也不能少,否则出错。
 
本人使用Windows2000 Server .Net Framework SP3 ,VS.Net下在asp.net下使用成功,加密解密正常!
posted on 2007-05-10 15:48  刺猬博客  阅读(194)  评论(1编辑  收藏  举报