`
shazhifeng
  • 浏览: 123208 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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();
} 

 

分享到:
评论

相关推荐

    DES加密解密源代码

    DES加密解密函数,下载一个CPP和一个.H中,main函数只是演示使用的。做DES加密的朋友可以直接拿来用。加解密函数一次处理八个字节,不足的请自行补足,超过的自行设计截断。密钥也请自行处理为八个字节

    des源代码(加解密的密钥生成)

    C代码 //初始置换表IP int IP_Table[64] = { 57,49,41,33,25,17,9,1, 59,51,43,35,27,19,11,3, 61,53,45,37,29,21,13,5, 63,55,47,39,31,23,15,7, 56,48,40,32,24,16,8,0, 58,50,42,34,26,18,10,2, ...

    c# 加密和解密相关代码

    图19.3 使用ROT13算法加密解密数据 关 键技术 本实例实现时,主要是用Convert 类的ToChar 方法来获取单个字符的Unicode 编码,然后将字母的前13 个和后13 个对调,从而实现加密的功能。下面对Convert类的ToChar 方法...

    DES加密Verilog模块设计

    对DES加密算法进行了图解和说明,并用表格形式对DES的置换规则,放大换位,单纯换位进行了描述。且对DES算法框图中的选择函数S1,S8进行了表格描述。另外本文还对采用的硬件描述语言Verilog HDL进行了简介,对其语法...

    DES算法加密解密[C语言版源代码],跨平台毫无压力

    函数描述详细,可以随拿随用 测试MDK运行无压力 VS2010运行无压力 结果验证与各个测试工具一致

    C++中四种加密算法之DES源代码

    对称算法的对称性体现在加密密钥能够从解密密钥推算出来,反之亦然。 在大多数对称算法中,加解密的密钥是相同的,DES就是这样。可见,对称密钥算法的加解密密钥都是保密的。而公开密钥算法的加密密钥是公开的,解密...

    完全掌握加密解密实战超级手册.z01

    《完全掌握加密解密实战超级手册》讲解通俗,深入浅出,注重实践,适用于广大计算机软件加密解密技术新手、爱好者,适用于软件开发从业人员和编程爱好者,也非常适合大专院校相关专业学生,以及有志于从事安全或加...

    Java加密与解密的艺术配书源代码

    文件校验209 6.8 小结211 第7章初等数据加密—对称加密算法213 7.1 对称加密算法简述213 7.2 数据加密标准—DES 214 7.3 三重DES—DESede 222 7.4 高级数据加密标准—AES 227 7.5 国际数据加密标准—IDEA 232 7.6 ...

    完全掌握加密解密实战超级手册.zip02

    953.4.3 DSA数据签名技术 963.4.4 Diffie-Hellman密钥交换系统概述 973.5 专家点拨:常见问题解答 97第4章 静态分析解密工具 984.1 程序源代码概述 994.1.1 基本程序信息 994.1.2 反汇编源代码部分 1014.2 常用反...

    对称密码之DES实验源代码

    故有效密钥长度是56位,分为左右两半,各为28位,分别循环左移后合并,进入置换选择PC2,变为48位,将结果与扩展后的R0异或,进入函数组S1,变为32位,再进入置换选择P,输出加密函数f,函数f与L0异或,其结果成为R1...

    DELPHI源代码-读卡器开发

    DELPHI源代码-读卡器开发 #ifndef _EXPORT_FUNC_H_ #define _EXPORT_FUNC_H_ //return successful result #define LIB_SUCCESS 0 //return failed result #define LIB_FAILED 1 #define MAX_RF_BUFFER 1024 /**...

    JAVA上百实例源码以及开源项目源代码

    凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 简单 EJB的真实世界模型(源代码) 15个目标文件 摘要:Java源码,初学实例,基于EJB的真实...

    Javascript C#真正可以交互的DES加解密代码

    因为时间关系,没有去深究加密代码,就随便下载了一个JS版本的, 并把它改写成C#版本的 这样JS加密后的结果,C#也能解密 反之C#加密后的结果,JS也能解密 我把它发出来给大家共享吧 注:源代码是VS.Net2008版本创建...

    vc++ 应用源码包_1

    DES加密算法源代码 Detected memory leaks 检查内存泄漏源码 DigiStatic_src 自绘CStatic实现数字效果。 DirectShow开发指南pdf附属代码 DirectShow开发指南源码 directUI_D DirectUI界面库 DOM应用---遍历...

    vc源代码合集.rar

    2012-06-11 08:49 45,056 DES算法用C++实现的源代码.doc 2012-06-11 08:27 6,261,754 KTV.zip 2012-06-11 08:58 606,972 listView 美化.rar 2012-06-11 08:56 5,784,486 MFC实现QQ在线状态检测.rar 2012-06-11 08:49...

    目前.NET最强SOCKET框架组“北风之神”(ZYSOCKET) 3.1 源代码

    加解密实例测试 项目:演示了 AES DES 以及Deflate 的使用方法。 例3 - 例2的加密版 项目:就是讲例2通过DES 加密进行通讯的例子 连接测试工具 项目:很多朋友问我要连接数量测试工具。我一起的真的丢了。找不到了...

    gladman_AES_CBC_CTR源代码

    高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准...本文将介绍AES的具体流程,以及代码实现,并且实现了CBC和CTR模式的解密函数

    vc++ 应用源码包_6

    DES加密算法源代码 Detected memory leaks 检查内存泄漏源码 DigiStatic_src 自绘CStatic实现数字效果。 DirectShow开发指南pdf附属代码 DirectShow开发指南源码 directUI_D DirectUI界面库 DOM应用---遍历...

    vc++ 应用源码包_5

    DES加密算法源代码 Detected memory leaks 检查内存泄漏源码 DigiStatic_src 自绘CStatic实现数字效果。 DirectShow开发指南pdf附属代码 DirectShow开发指南源码 directUI_D DirectUI界面库 DOM应用---遍历...

Global site tag (gtag.js) - Google Analytics