DES加密标准的说明以及加密/解密函数的实现源代码

面是来自维基的关于DES的说明: 数据加密标准( DES )是一种加密演算法(一种加密信息的方法), 1976年被美国联邦政府的联邦信息处理标准(FIPS)所选中,随后既在国际上广泛流传开来。这个演算法因为包含一些机密设计元素,相关的短密钥长度以及被怀疑内含国家安全局(NSA)的后门而在开始是有争议的,DES因此收到强烈的学院派式的审查,并以此推动了现代的分组密码及其密码分析。这个演算法因为包含一些机密设计元素,相关的短密钥长度以及被怀疑内含国家安全局(NSA)的后门而在开始是有争议的,DES因此收到强烈的学院派式的审查,并以此推动了现代的分组密码及其密码分析。

DES现在已经不被视为一种安全的加密演算法,因为它使用的56位秘钥过短,以现代计算能力,24小时内极可能被破解。 也有一些分析报告提出了该演算法的理论上的弱点,虽然实际情况未必出现。该标准在最近已经被高级加密标准(AES)所取代。

虽然是一种被取代了的算法,不过通过理解和研究这种算法的实现,还是可以带给我们不少启示的。下面是实现的C#代码:

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Text;
using System.IO;
using System.Security.Cryptography; 

private void menuItem13_Click(
    object sender,
    System.EventArgs e)
{
    //对应加密函数DSACrypData(string  strcrypto)
    string strcrypto=richTextBox1.Text;
    DSACrypData(strcrypto);
}

public static void DSACrypData(string  strcrypto)
{
    //先要将字符串转换为字节数组,这与编码有关。
    string str = "this is a test.";
    byte[] bytes = Encoding.ASCII.GetBytes(str);
    //选择签名方式,有RSA和DSA
    DSACryptoServiceProvider dsac =
             new DSACryptoServiceProvider();
    byte[] sign = dsac.SignData(bytes);
    //sign便是出来的签名结果。

    //下面是认证了
    DSACryptoServiceProvider dsac2 =
          new DSACryptoServiceProvider();
    dsac2.FromXmlString(dsac.ToXmlString(false));
    bool ver = dsac2.VerifyData(bytes, sign);
    if (ver)
    {
        MessageBox.Show("通过");
    }
    else
    {
        MessageBox.Show("不能通过");
    }
}

private void menuItem17_Click(
    object sender,
     System.EventArgs e)
{
    //对应加密函数DSACrypData(string  strcrypto)
    string strData=richTextBox1.Text;
    richTextBox2.Text=DESEncodeData(strData);
}
public static string DESEncodeData(string data)
{
    string KEY_64 = "VavicApp";
    string IV_64 = "VavicApp";
    byte[] byKey =
         System.Text.ASCIIEncoding.ASCII.GetBytes(KEY_64);
    byte[] byIV =
         System.Text.ASCIIEncoding.ASCII.GetBytes(IV_64);

    DESCryptoServiceProvider cryptoProvider =
                            new DESCryptoServiceProvider();
    int i = cryptoProvider.KeySize;
    MemoryStream ms = new MemoryStream();
    CryptoStream cst =
        new CryptoStream(ms,
        cryptoProvider.CreateEncryptor(byKey,byIV),
        CryptoStreamMode.Write);

    StreamWriter sw = new StreamWriter(cst);
    sw.Write(data);
    sw.Flush();
    cst.FlushFinalBlock();
    sw.Flush();
    return Convert.ToBase64String(
        ms.GetBuffer(),0,(int)ms.Length);
} 

private void menuItem21_Click(
    object sender,
     System.EventArgs e)
{
    //对应加密函数DSACrypData(string  strcrypto)
    string strData=richTextBox1.Text;
    richTextBox2.Text=DESDecodeData(strData);
}

public static string DESDecodeData(string data)
{
    string KEY_64 = "VavicApp";
    string IV_64 = "VavicApp";
    byte[] byKey =
        System.Text.ASCIIEncoding.ASCII.GetBytes(KEY_64);
    byte[] byIV =
        System.Text.ASCIIEncoding.ASCII.GetBytes(IV_64);

    byte[] byEnc;
    try
    {
        byEnc = Convert.FromBase64String(data);
    }
    catch
    {
        return null;
    }

    DESCryptoServiceProvider cryptoProvider =
        new DESCryptoServiceProvider();
    MemoryStream ms = new MemoryStream(byEnc);
    CryptoStream cst =
        new CryptoStream(ms,
        cryptoProvider.CreateDecryptor(byKey,byIV),
        CryptoStreamMode.Read);
    StreamReader sr = new StreamReader(cst);
    return sr.ReadToEnd();
} 

 

你可能感兴趣的:(算法,windows,Security)