.net名称空间System.Security.Cryptography下DESCryptoServiceProvider类为我们提供了加密和解密方法,我们只需少许代码便可实现加密和解密。
稍感不托的地方,如果不是自行加密的在解密时会报错。
使用注意事项,密钥64位,8个字符。
定义默认加密密钥
const string KEY_64 = "ChinabCd"; const string IV_64 = "ChinabCd";
加密
/// <summary> /// 按指定键值进行加密 /// </summary> /// <param name="strContent">要加密字符</param> /// <param name="strKey">自定义键值</param> /// <returns></returns> public static string EnCrypt(string strContent, string strKey) { if (string.IsNullOrEmpty(strContent)) return string.Empty; if (strKey.Length > 8) strKey = strKey.Substring(0, 8); else strKey = KEY_64; byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(strKey); byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(IV_64); DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider(); int i = cryptoProvider.KeySize; MemoryStream ms = new MemoryStream(); CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateEncryptor(byKey, byIV), CryptoStreamMode.Write); StreamWriter sw = new StreamWriter(cst); sw.Write(strContent); sw.Flush(); cst.FlushFinalBlock(); sw.Flush(); return Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length); }
解密
/// <summary> /// 按指定键值进行解密 /// </summary> /// <param name="strContent">要解密字符</param> /// <param name="strKey">加密时使用的键值</param> /// <returns></returns> public static string DeCrypt(string strContent, string strKey) { if (string.IsNullOrEmpty(strContent)) return string.Empty; if (strKey.Length > 8) strKey = strKey.Substring(0, 8); else strKey = KEY_64; byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(strKey); byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(IV_64); byte[] byEnc; try { byEnc = Convert.FromBase64String(strContent); } catch { return null; } DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider(); MemoryStream ms = new MemoryStream(byEnc); CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateDecryptor(byKey, byIV), CryptoStreamMode.Read); StreamReader sr = new StreamReader(cst); return sr.ReadToEnd(); }