面是来自维基的关于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加密解密函数,下载一个CPP和一个.H中,main函数只是演示使用的。做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, ...
图19.3 使用ROT13算法加密解密数据 关 键技术 本实例实现时,主要是用Convert 类的ToChar 方法来获取单个字符的Unicode 编码,然后将字母的前13 个和后13 个对调,从而实现加密的功能。下面对Convert类的ToChar 方法...
对DES加密算法进行了图解和说明,并用表格形式对DES的置换规则,放大换位,单纯换位进行了描述。且对DES算法框图中的选择函数S1,S8进行了表格描述。另外本文还对采用的硬件描述语言Verilog HDL进行了简介,对其语法...
函数描述详细,可以随拿随用 测试MDK运行无压力 VS2010运行无压力 结果验证与各个测试工具一致
对称算法的对称性体现在加密密钥能够从解密密钥推算出来,反之亦然。 在大多数对称算法中,加解密的密钥是相同的,DES就是这样。可见,对称密钥算法的加解密密钥都是保密的。而公开密钥算法的加密密钥是公开的,解密...
《完全掌握加密解密实战超级手册》讲解通俗,深入浅出,注重实践,适用于广大计算机软件加密解密技术新手、爱好者,适用于软件开发从业人员和编程爱好者,也非常适合大专院校相关专业学生,以及有志于从事安全或加...
文件校验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 ...
953.4.3 DSA数据签名技术 963.4.4 Diffie-Hellman密钥交换系统概述 973.5 专家点拨:常见问题解答 97第4章 静态分析解密工具 984.1 程序源代码概述 994.1.1 基本程序信息 994.1.2 反汇编源代码部分 1014.2 常用反...
故有效密钥长度是56位,分为左右两半,各为28位,分别循环左移后合并,进入置换选择PC2,变为48位,将结果与扩展后的R0异或,进入函数组S1,变为32位,再进入置换选择P,输出加密函数f,函数f与L0异或,其结果成为R1...
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 /**...
凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 简单 EJB的真实世界模型(源代码) 15个目标文件 摘要:Java源码,初学实例,基于EJB的真实...
因为时间关系,没有去深究加密代码,就随便下载了一个JS版本的, 并把它改写成C#版本的 这样JS加密后的结果,C#也能解密 反之C#加密后的结果,JS也能解密 我把它发出来给大家共享吧 注:源代码是VS.Net2008版本创建...
DES加密算法源代码 Detected memory leaks 检查内存泄漏源码 DigiStatic_src 自绘CStatic实现数字效果。 DirectShow开发指南pdf附属代码 DirectShow开发指南源码 directUI_D DirectUI界面库 DOM应用---遍历...
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...
加解密实例测试 项目:演示了 AES DES 以及Deflate 的使用方法。 例3 - 例2的加密版 项目:就是讲例2通过DES 加密进行通讯的例子 连接测试工具 项目:很多朋友问我要连接数量测试工具。我一起的真的丢了。找不到了...
高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准...本文将介绍AES的具体流程,以及代码实现,并且实现了CBC和CTR模式的解密函数
DES加密算法源代码 Detected memory leaks 检查内存泄漏源码 DigiStatic_src 自绘CStatic实现数字效果。 DirectShow开发指南pdf附属代码 DirectShow开发指南源码 directUI_D DirectUI界面库 DOM应用---遍历...
DES加密算法源代码 Detected memory leaks 检查内存泄漏源码 DigiStatic_src 自绘CStatic实现数字效果。 DirectShow开发指南pdf附属代码 DirectShow开发指南源码 directUI_D DirectUI界面库 DOM应用---遍历...