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();
} 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值