C#DES加密解密
DES加密算法:
DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),并授权在非密级政府通信中使用,随后该算法在国际上广泛流传开来。需要注意的是,在某些文献中,作为算法的DES称为数据加密算法(Data Encryption Algorithm,DEA),已与作为标准的DES区分开来。
DES安全性问题:
DES算法具有极高安全性,到目前为止,除了用穷举搜索法对DES算法进行攻击外,还没有发现更有效的办法。而56位长的密钥的穷举空间为2^56,这意味着如果一台计算机的速度是每一秒钟检测一百万个密钥,则它搜索完全部密钥就需要将近2285年的时间,可见,这是难以实现的。然而,这并不等于说DES是不可破解的。而实际上,随着硬件技术和Internet的发展,其破解的可能性越来越大,而且,所需要的时间越来越少。使用经过特殊设计的硬件并行处理要几个小时。为了克服DES密钥空间小的缺陷,人们又提出了三重DES的变形方式。
临时记录这些,后期会对加密解密这块详细的做个研究。
C#代码
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; //下面是额外添加的命名空间 using System.Security.Cryptography; using System.IO; namespace DESEncryptDemo { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { string keystr = textBoxKey.Text.Replace(" ", ""); if (keystr == "") { MessageBox.Show("请输入密钥", "提示!"); return; } string EncrypyStr = richTextBoxEncrypt.Text; if (EncrypyStr == "") { MessageBox.Show("请输入加密内容", "提示!"); return; } try { DESCryptoServiceProvider descsp = new DESCryptoServiceProvider(); byte[] key = Encoding.Unicode.GetBytes(keystr);//定义字节数组用来存储密钥 byte[] data = Encoding.Unicode.GetBytes(EncrypyStr);//定义字节数组,用来存储加密对象 MemoryStream MStream = new MemoryStream(); CryptoStream CStream = new CryptoStream(MStream, descsp.CreateEncryptor(key, key), CryptoStreamMode.Write); CStream.Write(data, 0, data.Length); CStream.FlushFinalBlock();//释放解秘流 richTextBoxDecrypt.Text = Convert.ToBase64String(MStream.ToArray()); } catch (Exception) { MessageBox.Show("密钥长度无效,密钥有效长度只能是4", "提示!"); } } private void button2_Click(object sender, EventArgs e) { string keystr = textBoxKey.Text.Replace(" ", ""); if (keystr == "") { MessageBox.Show("请输入密钥", "提示!"); return; } string DecrypyStr = richTextBoxDecrypt.Text; if (DecrypyStr == "") { MessageBox.Show("请输入解密内容", "提示!"); return; } try { //实例化加密对象 DESCryptoServiceProvider descsp = new DESCryptoServiceProvider(); byte[] key = Encoding.Unicode.GetBytes(keystr);//定义字节数组用来存储密钥 byte[] data = Convert.FromBase64String(DecrypyStr);//定义字节数组,用来存储加密对象 //实例化内存对象 MemoryStream MStream = new MemoryStream(); CryptoStream CStream = new CryptoStream(MStream, descsp.CreateDecryptor(key, key), CryptoStreamMode.Write); CStream.Write(data, 0, data.Length); CStream.FlushFinalBlock();//释放解秘流 richTextBoxEncrypt.Text= Encoding.Unicode.GetString(MStream.ToArray()); } catch(Exception) { MessageBox.Show("解密失败!", "提示!"); } } } }
效果图:
不知道为啥加密密钥只能是4个字符,难道和加密密钥的长度64有关?在简单解决问题的时候搜搜到DES的加密模式:ECB,CBC,FCB等。
暂且放着。。。