DESCryptoServiceProvider 類加密解密
阿新 • • 發佈:2017-08-05
加密 get data con 查看 一個 sea byte logs
DESCryptoServiceProvider 點擊查看介紹
加密解密輔助類:點擊查看
私鑰加密
定義:定義一個包裝對象來訪問加密服務提供程序 (CSP) 版本的數據加密標準 (DES) 算法。 此類不能被繼承。
研究這個類不如去研究它的父類,所以我們把重點轉移到 Des這個類
Des
定義:表示數據加密標準 (DES) 算法的基類,所有 DES 實現都必須從此基類派生。
你需要知道:
你只用設置Key(秘鑰)和 IV(向量)。
4.0以下
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));
4.5或以上就會顯示此類已過時,所以我們得換一種寫法。
我們可以根據密碼來加密
public static string MD5(string str) { //微軟md5方法參考return FormsAuthentication.HashPasswordForStoringInConfigFile(str, "md5");byte[] b = Encoding.Default.GetBytes(str); b = new MD5CryptoServiceProvider().ComputeHash(b); string ret = ""; for (int i = 0; i < b.Length; i++) ret += b[i].ToString("x").PadLeft(2, ‘0‘); //轉成16進制,如果小於2位用0補充 return ret; }
我們配置好了Key和IV ,就可以使用這個了,你可以知道,加密和解密所配置的Key和IV必須為一樣的。
加密/解碼都返回這個接口
準備工作完成了。最後一個類
CryptoStream 類
定義將數據流鏈接到加密轉換的流。
第一個參數 流,
第二個參數 接口
第三個參數 枚舉
完整的一套加密:
///// <summary> ///// 加密數據 ///// </summary> ///// <param name="text">加密字符串</param> ///// <param name="skey">生成秘鑰,默認為MATICSOFT</param> ///// <returns>返回加密字符串</returns> public static string Encrypt(string Text, string sKey = "MATICSOFT") { DESCryptoServiceProvider des = new DESCryptoServiceProvider(); byte[] inputByteArray; inputByteArray = Encoding.Default.GetBytes(Text); //把文本轉成字節 des.Key = ASCIIEncoding.ASCII.GetBytes(MD5(sKey).Substring(0, 8)); des.IV = ASCIIEncoding.ASCII.GetBytes(MD5(sKey).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);//十六進制字符串,後面的2為精度. } return ret.ToString(); } /// <summary> /// 對秘鑰進行處理 /// </summary> /// <param name="str">你的秘鑰</param> /// <returns></returns> public static string MD5(string str) { //微軟md5方法參考return FormsAuthentication.HashPasswordForStoringInConfigFile(str, "md5"); byte[] b = Encoding.Default.GetBytes(str); b = new MD5CryptoServiceProvider().ComputeHash(b); string ret = ""; for (int i = 0; i < b.Length; i++) ret += b[i].ToString("x").PadLeft(2, ‘0‘); //轉成16進制,如果小於2位用0補充 return ret; }
/// <summary> /// 解密數據 /// </summary> /// <param name="Text">加密的字符串</param> /// <param name="sKey">解密秘鑰</param> /// <returns>解密後的字符串</returns> public static string Decrypt(string Text, string sKey = "MATICSOFT") { 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(MD5(sKey).Substring(0, 8)); des.IV = ASCIIEncoding.ASCII.GetBytes(MD5(sKey).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()); }
DESCryptoServiceProvider 類加密解密