1. 程式人生 > >DESCryptoServiceProvider 類加密解密

DESCryptoServiceProvider 類加密解密

加密 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 類加密解密