当前位置: 首页> 房产> 市场 > C# 加解密之DES

C# 加解密之DES

时间:2025/7/14 14:01:28来源:https://blog.csdn.net/qq_27410185/article/details/141923907 浏览次数:0次
说完了对称加密中的AES,这一篇再来介绍下DES。

加解密原理什么的就不介绍了,大家可以自行百度(主要我也不太明白,也不需要太明白),大致说一下两者的区别吧!

  1. 首先肯定是加密算法的不同,嗯,这一句完全是废话,不同的加密方式算法肯定不会一样。
  2. AES比DES的运算速度更快。
  3. 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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: