///<summary>
/// DES加密与解密
///</summary>
publicclass DESEncrypt
{
#region DES加密
///<summary>
/// 使用默认密钥加密
///</summary>
///<param name="strText"></param>
///<returns></returns>
publicstaticstring Encrypt(string strText)
{
return Encrypt(strText, "TSF");
}
///<summary>
/// 使用给定密钥加密
///</summary>
///<param name="strText"></param>
///<param name="sKey">密钥</param>
///<returns></returns>
publicstaticstring Encrypt(string strText, string sKey)
{
DESCryptoServiceProvider des =new DESCryptoServiceProvider();
byte[] inputByteArray = Encoding.Default.GetBytes(strText);
des.Key = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8));
des.IV = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8));
System.IO.MemoryStream ms =new System.IO.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();
}
#endregion
#region DES解密
///<summary>
/// 使用默认密钥解密
///</summary>
///<param name="strText"></param>
///<returns></returns>
publicstaticstring Decrypt(string strText)
{
return Decrypt(strText, "TSF");
}
///<summary>
/// 使用给定密钥解密
///</summary>
///<param name="strText"></param>
///<param name="sKey"></param>
///<returns></returns>
publicstaticstring Decrypt(string strText, string sKey)
{
DESCryptoServiceProvider des =new DESCryptoServiceProvider();
int len = strText.Length /2;
byte[] inputByteArray =newbyte[len];
int x, i;
for (x =0; x < len; x++)
{
i = Convert.ToInt32(strText.Substring(x *2, 2), 16);
inputByteArray[x] = (byte)i;
}
des.Key = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8));
des.IV = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8));
System.IO.MemoryStream ms =new System.IO.MemoryStream();
CryptoStream cs =new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
return Encoding.Default.GetString(ms.ToArray());
}
#endregion
}
D.E.S 是分块加密的,将明文分割成 64 BITS 的块, 然后他们一个个接起来 。他使用56位密钥对64位的数据块进行加密,并对64bits的数据块进行16轮编码。和每轮编码时,一个48bits的“每轮”密钥值由56bits的完整密钥得出来。DES用软件进行解码需要用非常长时间,而用硬件解码速度非常快,1977年,人们估计要耗资两千万美元才能建成一个专门计算机用于DES的解密,而且需要12个小时的破解才能得到结果。所以,当时DES被认为是一种十分强壮的加密方法。但今天, 只需 二十万美圆就能制造一台破译DES的特别的计算机,所以目前 DES 对需求“强壮”加密的场合已不再适用了。