最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#加解密之DES算法的實現(xiàn)

 更新時間:2022年08月23日 11:21:42   作者:Csharp小記  
DES算法為密碼體制中的對稱密碼體制,又被稱為美國數(shù)據(jù)加密標(biāo)準(zhǔn)。本文將用C#語言實現(xiàn)DES算法,文中的示例代碼講解詳細(xì),感興趣的可以了解一下

前言

說完了對稱加密中的AES,這一篇再來介紹下DES。

加解密原理什么的就不介紹了,大家可以自行百度(主要我也不太明白,也不需要太明白),大致說一下兩者的區(qū)別吧!

  • 首先肯定是加密算法的不同,嗯,這一句完全是廢話,不同的加密方式算法肯定不會一樣。
  • AES比DES的運算速度更快。
  • AES比DES破解難度高,相對比較安全。

代碼實現(xiàn)的話其實AES和DES的寫法是基本差不多的,但是這里有一個參數(shù)問題還是需要提一下。在上一篇AES中我們有介紹過密鑰長度只能是16、24、32;在DES中的話,密鑰(Key)的長度是8(由于密鑰的長度問題,所以這里如果使用暴力破解的話,還是有很高的概率可以還原數(shù)據(jù)),有向量(IV)的話,長度一般也是8;然后就是在AES中我們采用的是Rijndael,在這里我們換成DESCryptoServiceProvider;兩個加密的實現(xiàn)代碼主要就是這里的不同,其他基本一模一樣,所以稍微改一下即可。

實現(xiàn)功能

使用DES加密方式加解密文本數(shù)據(jù)

開發(fā)環(huán)境

開發(fā)工具:Visual Studio 2013

.NET Framework版本:4.5

實現(xiàn)代碼

 public class DesUtil
    {
        /// <summary>
        /// DES加密
        /// </summary>
        /// <param name="desModel"></param>
        /// <returns></returns>
        public static byte[] Encrypt(DesModel desModel)
        {
            //使用8位密鑰
            byte[] key8 = new byte[8];
            //如果我們的密鑰不是8為,則自動補全到8位
            byte[] byteKey = Encoding.UTF8.GetBytes(desModel.Key.PadRight(key8.Length));
            //復(fù)制密鑰
            Array.Copy(byteKey, key8, key8.Length);

            //使用8位向量
            byte[] iv8 = new byte[8];
            //如果我們的向量不是8為,則自動補全到8位
            byte[] byteIv = Encoding.UTF8.GetBytes(desModel.IV.PadRight(iv8.Length));
            //復(fù)制向量
            Array.Copy(byteIv, iv8, iv8.Length);

            // 創(chuàng)建加密對象
            DESCryptoServiceProvider desProvider = new DESCryptoServiceProvider();
            desProvider.Mode = desModel.Mode;
            desProvider.Padding = desModel.Padding;
            desProvider.Key = key8;
            desProvider.IV = iv8;
            byte[] result = null;
            try
            {
                using (MemoryStream ms = new MemoryStream())
                {
                    using (CryptoStream EncryptStream = new CryptoStream(ms, desProvider.CreateEncryptor(), CryptoStreamMode.Write))
                    {
                        EncryptStream.Write(desModel.Data, 0, desModel.Data.Length);
                        EncryptStream.FlushFinalBlock();
                        result = ms.ToArray();
                    }
                }
            }
            catch { }
            return result;
        }

        /// <summary>
        /// DES解密
        /// </summary>
        /// <param name="desModel"></param>
        /// <returns></returns>
        public static byte[] Decrypt(DesModel desModel)
        {
            //使用8位密鑰
            byte[] key8 = new byte[8];
            //如果我們的密鑰不是8為,則自動補全到8位
            byte[] byteKey = Encoding.UTF8.GetBytes(desModel.Key.PadRight(key8.Length));
            //復(fù)制密鑰
            Array.Copy(byteKey, key8, key8.Length);

            //使用8位向量
            byte[] iv8 = new byte[8];
            //如果我們的向量不是8為,則自動補全到8位
            byte[] byteIv = Encoding.UTF8.GetBytes(desModel.IV.PadRight(iv8.Length));
            //復(fù)制向量
            Array.Copy(byteIv, iv8, iv8.Length);

            // 創(chuàng)建解密對象
            DESCryptoServiceProvider desProvider = new DESCryptoServiceProvider();
            desProvider.Mode = desModel.Mode;
            desProvider.Padding = desModel.Padding;
            desProvider.Key = key8;
            desProvider.IV = iv8;
            byte[] result = null;
            try
            {
                using (MemoryStream ms = new MemoryStream(desModel.Data))
                {
                    using (CryptoStream DecryptStream = new CryptoStream(ms, desProvider.CreateDecryptor(), CryptoStreamMode.Read))
                    {
                        using (MemoryStream msResult = new MemoryStream())
                        {
                            byte[] temp = new byte[1024 * 1024];
                            int len = 0;
                            while ((len = DecryptStream.Read(temp, 0, temp.Length)) > 0)
                            {
                                msResult.Write(temp, 0, len);
                            }

                            result = msResult.ToArray();
                        }
                    }
                }
            }
            catch { }
            return result;
        }

        /// <summary>
        /// DES加密字符串
        /// </summary>
        /// <param name="data"></param>
        /// <param name="key"></param>
        /// <param name="iv"></param>
        /// <returns></returns>
        public static string Encrypt(string data, string key, string iv = "")
        {
            byte[] bytes = Encoding.UTF8.GetBytes(data);
            byte[] result = Encrypt(new DesModel
            {
                Data = bytes,
                Key = key,
                IV = iv,
                Mode = CipherMode.CBC,
                Padding = PaddingMode.PKCS7
            });
            if (result == null)
            {
                return "";
            }
            return Convert.ToBase64String(result);
        }

        /// <summary>
        /// DES解密字符串
        /// </summary>
        /// <param name="data"></param>
        /// <param name="key"></param>
        /// <param name="iv"></param>
        /// <returns></returns>
        public static string Decrypt(string data, string key, string iv = "")
        {
            byte[] bytes = Convert.FromBase64String(data);
            byte[] result = Decrypt(new DesModel
            {
                Data = bytes,
                Key = key,
                IV = iv,
                Mode = CipherMode.CBC,
                Padding = PaddingMode.PKCS7
            });
            if (result == null)
            {
                return "";
            }
            return Encoding.UTF8.GetString(result);
        }


        public class DesModel
        {
            /// <summary>
            /// 需要加密/解密的數(shù)據(jù)
            /// </summary>
            public byte[] Data { get; set; }

            /// <summary>
            /// 密鑰
            /// </summary>
            public string Key { get; set; }

            /// <summary>
            /// 向量
            /// </summary>
            public string IV { get; set; }

            /// <summary>
            /// 加密模式
            /// </summary>
            public CipherMode Mode { get; set; }

            /// <summary>
            /// 填充模式
            /// </summary>
            public PaddingMode Padding { get; set; }
        }
    }
 private void btn_Des_Encrypt_Click(object sender, EventArgs e)
        {
            string result = DesUtil.Encrypt(textBox1.Text, "12345678900987654321");
            textBox2.Text = result;
        }

        private void btn_Des_Decrypt_Click(object sender, EventArgs e)
        {
            string result = DesUtil.Decrypt(textBox2.Text, "12345678900987654321");
            textBox1.Text = result;

        }

實現(xiàn)效果

以上就是C#加解密之DES算法的實現(xiàn)的詳細(xì)內(nèi)容,更多關(guān)于C# DES算法的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C#獲取動態(tài)生成的CheckBox值

    C#獲取動態(tài)生成的CheckBox值

    checkbox是VS2012的常用控件之一,可以方便的為某些功能取消或啟用,下面教你如何簡單使用checkbox。本文通過兩種方法給大家介紹,需要的朋友一起看看吧
    2015-09-09
  • C# 關(guān)于AppDomain的一些總結(jié)

    C# 關(guān)于AppDomain的一些總結(jié)

    這篇文章主要介紹了C# 關(guān)于AppDomain的一些總結(jié),幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2021-02-02
  • 使用C#程序驗證系統(tǒng)登錄用戶與目錄權(quán)限

    使用C#程序驗證系統(tǒng)登錄用戶與目錄權(quán)限

    這篇文章主要介紹了使用C#程序驗證系統(tǒng)登錄用戶與目錄權(quán)限,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • c#異步讀取數(shù)據(jù)庫與異步更新ui的代碼實現(xiàn)

    c#異步讀取數(shù)據(jù)庫與異步更新ui的代碼實現(xiàn)

    這篇文章主要介紹了c#從數(shù)據(jù)庫里取得數(shù)據(jù)并異步更新ui的方法,大家參考使用吧
    2013-12-12
  • C#自定義事件及用法實例

    C#自定義事件及用法實例

    這篇文章主要介紹了C#自定義事件及用法,實例分析了C#中自定義事件的定義與使用技巧,需要的朋友可以參考下
    2015-05-05
  • C#實現(xiàn)洗牌算法

    C#實現(xiàn)洗牌算法

    洗牌算法的要求是這樣的:將N個數(shù)亂序后輸出.由于和撲克牌的洗牌過程比較相似所以我也就稱為洗牌算法了.很多地方都不自覺的需要這個算法的支持.也可以將這個算法擴展為從N個數(shù)中取出M個不重復(fù)的數(shù)(0<M<=N).今天我們看下如何用C#來實現(xiàn)
    2015-03-03
  • WPF InkCanvas繪制矩形和橢圓

    WPF InkCanvas繪制矩形和橢圓

    這篇文章主要為大家詳細(xì)介紹了WPF InkCanvas繪制矩形和橢圓,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • Unity3D使用UGUI開發(fā)原生虛擬搖桿

    Unity3D使用UGUI開發(fā)原生虛擬搖桿

    這篇文章主要為大家詳細(xì)介紹了Unity3D使用UGUI開發(fā)原生虛擬搖桿,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • Unity實現(xiàn)全屏截圖以及QQ截圖

    Unity實現(xiàn)全屏截圖以及QQ截圖

    這篇文章主要為大家詳細(xì)介紹了Unity實現(xiàn)全屏截圖以及QQ截圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • C#判斷一個字符串是否包含另一個字符串的方法

    C#判斷一個字符串是否包含另一個字符串的方法

    這篇文章主要介紹了C#判斷一個字符串是否包含另一個字符串的方法,涉及C#中IndexOf方法的使用技巧,非常簡單實用,需要的朋友可以參考下
    2015-04-04

最新評論

普洱| 新竹县| 邳州市| 建宁县| 罗山县| 丹东市| 沈丘县| 从江县| 襄樊市| 漯河市| 扶绥县| 阳城县| 保山市| 曲松县| 洛川县| 尤溪县| 基隆市| 随州市| 玛曲县| 蒲江县| 土默特右旗| 莱州市| 永嘉县| 红河县| 吉首市| 东宁县| 安康市| 余姚市| 北京市| 远安县| 新和县| 达孜县| 祁阳县| 理塘县| 塘沽区| 兴城市| 启东市| 桐柏县| 陆良县| 阿拉善右旗| 甘谷县|