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等。

暂且放着。。。

 

posted @ 2018-12-14 11:09  随时静听  阅读(4555)  评论(0编辑  收藏  举报