<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
說完了對稱加密中的AES,這一篇再來介紹下DES。
加解密原理什麼的就不介紹了,大家可以自行百度(主要我也不太明白,也不需要太明白),大致說一下兩者的區別吧!
程式碼實現的話其實AES和DES的寫法是基本差不多的,但是這裡有一個引數問題還是需要提一下。在上一篇AES中我們有介紹過金鑰長度只能是16、24、32;在DES中的話,金鑰(Key)的長度是8(由於金鑰的長度問題,所以這裡如果使用暴力破解的話,還是有很高的概率可以還原資料),有向量(IV)的話,長度一般也是8;然後就是在AES中我們採用的是Rijndael,在這裡我們換成DESCryptoServiceProvider;兩個加密的實現程式碼主要就是這裡的不同,其他基本一模一樣,所以稍微改一下即可。
使用DES加密方式加解密文字資料
開發工具:Visual Studio 2013
.NET Framework版本:4.5
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)); //複製金鑰 Array.Copy(byteKey, key8, key8.Length); //使用8位元向量 byte[] iv8 = new byte[8]; //如果我們的向量不是8為,則自動補全到8位元 byte[] byteIv = Encoding.UTF8.GetBytes(desModel.IV.PadRight(iv8.Length)); //複製向量 Array.Copy(byteIv, iv8, iv8.Length); // 建立加密物件 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)); //複製金鑰 Array.Copy(byteKey, key8, key8.Length); //使用8位元向量 byte[] iv8 = new byte[8]; //如果我們的向量不是8為,則自動補全到8位元 byte[] byteIv = Encoding.UTF8.GetBytes(desModel.IV.PadRight(iv8.Length)); //複製向量 Array.Copy(byteIv, iv8, iv8.Length); // 建立解密物件 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> /// 需要加密/解密的資料 /// </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; }
以上就是C#加解密之DES演演算法的實現的詳細內容,更多關於C# DES演演算法的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45