面是来自维基的关于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();
}
分享到:
相关推荐
在C++中实现DES加密解密,可以创建一个类来封装相关的操作,这样有利于代码的复用和维护。 描述中提到的"单倍双倍加密算法的实现",可能是指使用DES算法进行一次或两次加密的过程。单次DES加密使用同一个密钥对数据...
这篇C语言源代码实现了DES加密解密算法,特别适合于资源有限的环境,如STM32或51单片机。STM32系列是基于ARM Cortex-M内核的微控制器,而51单片机则是早期广泛应用的8位微处理器。在这些平台上,由于内存(RAM)资源...
总结来说,VB6.0中实现DES加密解密涉及理解DES算法原理,利用`DESCryptoServiceProvider`类进行加密解密操作,并通过文件操作函数存储和读取加密数据。虽然DES已经过时,但在某些场景下,它仍然可以作为一个学习和...
在这个“DES加解密算法源代码,java”项目中,开发者通过自定义的Java代码实现了DES算法,而非直接使用Java的javax.crypto包中的预封装类。这种实现方式有助于深入理解DES的工作机制,包括初始置换、轮函数、逆初始...
1. **DES算法流程**:源代码会清晰地展示DES加密的完整流程,包括初始置换IP、密钥扩展、轮函数F以及逆初始置换等步骤。这有助于理解DES的工作原理。 2. **64位数据块和56位密钥**:DES处理的是64位的数据块,但...
通过上述步骤,你可以使用Cryptopp库在VC6下实现DES加密解密。虽然DES现在被认为安全性较低,已被更强大的算法如AES取代,但它仍然是理解和学习对称加密的一个基础。对于初学者,这个例子有助于掌握加密库的使用和...
学习和理解DES加密解密的实现,有助于深入理解密码学的基本原理,包括对称加密的运作方式,以及非线性和线性变换在加密算法中的应用。不过,需要注意的是,DES现在已经被视为较弱的加密标准,因为它只有56位的有效...
压缩包中的文件可能包含了Java源代码和JavaScript源代码示例,以及可能的测试数据。这些文件可以直接运行,用于演示如何在Java和JavaScript之间进行DES加密解密。通过查看和理解这些代码,你可以更好地了解如何在...
这些文件可能包含了实现上述功能的关键代码,如设置密钥、初始化向量(IV)、加密和解密函数,以及处理UTF-8编码的方法。 在实际开发中,这种加密组件可能被用于保护敏感数据,如用户密码、个人信息等。它在跨平台...
对系统资源消耗极低的DES加密算法代码,在普通51单片机上即可实现,仅需4K大小的flash存储,1K大小的ram。操作仅需两个函数,一个加密函数,一个解密函数,使用非常方便。
1. **des.c**:这是DES加密算法的核心实现文件,通常包含了一系列的函数,用于执行DES的加密和解密过程。这些函数可能包括`DES_set_key`(设置密钥)、`DES_ecb_encrypt`(电子密码本模式下的加密/解密)以及`DES_...
总之,Visual C++实现3DES加解密需要理解3DES算法原理,导入相应的加密库,设置密钥和加密模式,编写加解密函数,进行测试并处理文件操作。这个项目提供的源代码和资源文件可以帮助开发者深入理解并实践3DES在C++...
压缩包中的"DES"文件可能是实现这些功能的源代码文件,包含了上述的接口和实现细节。通过阅读和理解这个文件,你可以深入学习DES加密算法的实现原理,并且可以将其应用于自己的项目中,如数据保护、通信加密等场景。
9. **源代码分析**:压缩包中的"Des"文件可能包含了一个完整的C#项目或单独的源代码文件,用于演示如何在C#中实现DES加密解密。通过阅读和理解这些源代码,你可以深入理解DES的工作原理以及如何在实际应用中使用它。...
由于压缩包中只有一个名为"DES"的文件,我们可以假设这是源代码文件,包含了实现DES加密算法的C++代码。可能的结构包括主函数、DES类定义、密钥处理函数、加密和解密的实现等。通过查看和分析这个文件,可以更深入地...
这个文件通常会包括一个或多个自定义的DES加密和解密函数。通过阅读源代码,你可以看到如何在Delphi中手动实现DES算法的各个步骤,例如: - 密钥扩展:将56位密钥扩展为64位,并进行PC-1置换。 - 子密钥生成:使用...
- `3des.c`:C语言实现的3DES加密算法源代码。 - `3des.h`:头文件,包含函数声明和必要的宏定义。 - `jni_interface.c`:JNI接口文件,用于Android平台的调用。 - `Android.mk` 或 `CMakeLists.txt`:构建文件,...