加密与解密
using System.Security.Cryptography;

/**//// <summary>
/// 得到用对称算法进行加密的字符串
/// </summary>
/// <param name="data">待加密的字符串</param>
/// <returns></returns>
public string Encrypt(string data)

{
if (data == null)
data = "";
string tempStr = "";
for (int i = data.Length - 1; i >= 0; i--)

{
tempStr += ((char)(Convert.ToInt32(data[i]) + i)).ToString();
}
byte[] bytIn = UTF8Encoding.UTF8.GetBytes(tempStr);
MemoryStream ms = new MemoryStream();
DES encrypt = DES.Create();
encrypt.Key = GetKey();
encrypt.IV = GetIV();
ICryptoTransform encrypto = encrypt.CreateEncryptor();
CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Write);
cs.Write(bytIn, 0, bytIn.Length);
cs.FlushFinalBlock();
ms.Close();
byte[] bytOut = ms.ToArray();
return Convert.ToBase64String(bytOut);

}


/**//// <summary>
/// 得到用对称算法解密的字符串
/// </summary>
/// <param name="code">待解密的字符串</param>
/// <returns></returns>
public string Decode(string code)

{
byte[] bytIn = Convert.FromBase64String(code);
MemoryStream ms = new MemoryStream(bytIn, 0, bytIn.Length);
DES encrypt = DES.Create();
encrypt.Key = GetKey();
encrypt.IV = GetIV();
ICryptoTransform encrypto = encrypt.CreateDecryptor();
CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Read);
StreamReader sr = new StreamReader(cs);
string ret = sr.ReadToEnd();
string tempStr = "";
sr.Close();
ms.Close();
int j = 0;
for (int i = ret.Length - 1; i >= 0; i--)

{
tempStr += ((char)(Convert.ToInt32(ret[i]) - j)).ToString();
j++;
}
return tempStr;
}

/**//// <summary>
/// 得到对称加密算法的key
/// </summary>
/// <returns></returns>
private static byte[] GetKey()

{
string key = "Guz(%&hj7x89H$yuB*h%(HilJ$lhj!y6I0456FtmaT5&fvHUFCy76&(*jkP87j";
DES encrypt = DES.Create();
encrypt.GenerateKey();
byte[] byteTemp = encrypt.Key;

if (key.Length > byteTemp.Length)
key = key.Substring(0, byteTemp.Length);
else if (key.Length < byteTemp.Length)
key = key.PadRight(byteTemp.Length, ' ');
return System.Text.ASCIIEncoding.ASCII.GetBytes(key);
}


/**//// <summary>
/// 得到对称加密算法的向量
/// </summary>
/// <returns></returns>
private static byte[] GetIV()

{
string sTemp = "UY86GfghUb#er57HBh(u%g6HJ($jhWk7&!hg4ui%$hE4ghj*Ghg7!rNIfb&95G";
DES encrypt = DES.Create();
encrypt.GenerateKey();
byte[] bytTemp = encrypt.IV;
int IVLength = bytTemp.Length;
if (sTemp.Length > IVLength)
sTemp = sTemp.Substring(0, IVLength);
else if (sTemp.Length < IVLength)
sTemp = sTemp.PadRight(IVLength, ' ');
return System.Text.ASCIIEncoding.ASCII.GetBytes(sTemp);
}










































































































