對稱加密(向量) DES加密 倒序加1加密解密 Base64編解碼 ...
====對稱加密(向量)=====
//SymmetricAlgorithm 所有對稱演算法的實現都必須從中繼承的抽象基類 private SymmetricAlgorithm mobjCryptoService; private string key; public Encrypt() { mobjCryptoService = new RijndaelManaged(); key = "Guz(%&hj7x89H$yuBI0456FtmaT5&fvHUFCy76*h%(HilJ$lhj!y6&(*jkP87jH7";//自定義的密串 } /// <summary> /// 獲得密鑰 /// </summary> /// <returns>密鑰</returns> private byte[] GetLegalKey() { string sTemp = key; mobjCryptoService.GenerateKey();// 當在派生類中重寫時,生成用於該演算法的隨機密鑰 byte[] bytTemp = mobjCryptoService.Key; int KeyLength = bytTemp.Length; if (sTemp.Length > KeyLength) sTemp = sTemp.Substring(0, KeyLength); else if (sTemp.Length < KeyLength) sTemp = sTemp.PadRight(KeyLength, ' '); return ASCIIEncoding.ASCII.GetBytes(sTemp); } /// <summary> /// 獲得初始向量IV /// </summary> /// <returns>初試向量IV</returns> private byte[] GetLegalIV() { string sTemp = "E4ghj*Ghg7!rNIfb&95GUY86GfghUb#er57HBh(u%g6HJ($jhWk7&!hg4ui%$hjk"; mobjCryptoService.GenerateIV(); byte[] bytTemp = mobjCryptoService.IV;// 獲取或設置對稱演算法的初始化向量 int IVLength = bytTemp.Length;//獲得一個 32 位整數,表示 System.Array 的所有維數中元素的總數 if (sTemp.Length > IVLength) sTemp = sTemp.Substring(0, IVLength); else if (sTemp.Length < IVLength) sTemp = sTemp.PadRight(IVLength, ' '); return ASCIIEncoding.ASCII.GetBytes(sTemp); } /// <summary> /// 加密方法(請先實例化Encrypt類) /// </summary> /// <param name="Source">待加密的串</param> /// <returns>經過加密的串</returns> public string EncrypStrByIV(string Source) { byte[] bytIn = UTF8Encoding.UTF8.GetBytes(Source); MemoryStream ms = new MemoryStream(); mobjCryptoService.Key = GetLegalKey(); mobjCryptoService.IV = GetLegalIV(); ICryptoTransform encrypto = mobjCryptoService.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> /// 解密方法(請先實例化Encrypt類) /// </summary> /// <param name="Source">待解密的串</param> /// <returns>經過解密的串</returns> public string DecrypStrByIV(string Source) { byte[] bytIn = Convert.FromBase64String(Source); MemoryStream ms = new MemoryStream(bytIn, 0, bytIn.Length); mobjCryptoService.Key = GetLegalKey(); mobjCryptoService.IV = GetLegalIV(); ICryptoTransform encrypto = mobjCryptoService.CreateDecryptor(); CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Read); StreamReader sr = new StreamReader(cs); return sr.ReadToEnd(); }
========DES加密========
/// <summary> /// DES加密 /// </summary> /// <param name="Text">待加密的字元串</param> /// <returns>加密後的字元串</returns> public static string DESEncrypt(string Text) { return DESEncrypt(Text, "ijnskijnse"); } /// <summary> /// DES加密數據 /// </summary> /// <param name="Text">待加密的字元串</param> /// <param name="sKey">加密密鑰</param> /// <returns>加密後的字元串</returns> public static string DESEncrypt(string Text, string sKey) { DESCryptoServiceProvider des = new DESCryptoServiceProvider(); byte[] inputByteArray; inputByteArray = Encoding.Default.GetBytes(Text); 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(); } /// <summary> /// DES解密 /// </summary> /// <param name="Text">待解密的字元串</param> /// <returns>解密後的明文</returns> public static string DESDecrypt(string Text) { return DESDecrypt(Text, "ijnskijnse"); } /// <summary> /// DES解密數據 /// </summary> /// <param name="Text">待解密的字元串</param> /// <param name="sKey">解密密鑰</param> /// <returns>解密後的明文</returns> public static string DESDecrypt(string Text, string sKey) { DESCryptoServiceProvider des = new DESCryptoServiceProvider(); int len; len = Text.Length / 2; byte[] inputByteArray = new byte[len]; int x, i; for (x = 0; x < len; x++) { i = Convert.ToInt32(Text.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()); }
====倒序加1加密解密====
/// <summary> /// 倒序加1加密 /// </summary> /// <param name="rs"></param> /// <returns></returns> public static string EncryptOrderStr(string rs) //倒序加1加密 { byte[] by = new byte[rs.Length]; for (int i = 0; i <= rs.Length - 1; i++) { by[i] = (byte)((byte)rs[i] + 1); } rs = ""; for (int i = by.Length - 1; i >= 0; i--) { rs += ((char)by[i]).ToString(); } return rs; } /// <summary> /// 順序減1解碼 /// </summary> /// <param name="rs"></param> /// <returns></returns> public static string DecryptOrderStr(string rs) //順序減1解碼 { byte[] by = new byte[rs.Length]; for (int i = 0; i <= rs.Length - 1; i++) { by[i] = (byte)((byte)rs[i] - 1); } rs = ""; for (int i = by.Length - 1; i >= 0; i--) { rs += ((char)by[i]).ToString(); } return rs; }
======Base64編解碼=====
/// <summary> /// Base64編碼 /// </summary> /// <param name="code_type">編碼類型</param> /// <param name="code">待編碼的字元串</param> /// <returns></returns> public static string Base64Encode(string code_type, string code) { string encode = ""; byte[] bytes = Encoding.GetEncoding(code_type).GetBytes(code); try { encode = Convert.ToBase64String(bytes); } catch { encode = code; } return encode; } /// <summary> /// Base64解碼 /// </summary> /// <param name="code_type">編碼類型</param> /// <param name="code">帶解碼的字元串</param> /// <returns></returns> public static string Base64Decode(string code_type, string code) { string decode = ""; byte[] bytes = Convert.FromBase64String(code); try { decode = Encoding.GetEncoding(code_type).GetString(bytes); } catch { decode = code; } return decode; }