VS中用C#编写一个DES(或3DES)加解密的Windows应用程序

窗体中设三个TextBox,用来输入八字节的明文(或密文)、密钥和输出加密(或解密)后的数据(都是十六进制数据);设两个Button,分别为加密和解密。初学者求码,谢谢!
谢谢1.2楼的回答!可是我新手却实现不了。而且想要的是输入输出都为十六进制的数,想做一个相当于一个十六制的运算器。我最终的目的是通过这个学习,新添加一些异或等运算制作达到方便工作所需的计算器。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace ZU14
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

//ZU14.DES des = new ZU14.DES();
ZU14.DES des = null;

private void btn_jiami_Click(object sender, EventArgs e)
{
textBox2.Text = des.Encrypt(textBox1.Text);
// MessageBox.Show("加密成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}

private void btn_jiemi_Click(object sender, EventArgs e)
{
textBox3.Text = des.Decrypt(textBox2.Text);
//MessageBox.Show("解密成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}

private void btn_wjjiami_Click(object sender, EventArgs e)
{
OpenFileDialog open = new OpenFileDialog();
open.InitialDirectory = @"d:\";
open.Filter = "文本文件(*.txt,*.doc,*.xls)|*.txt;*.doc;*.xls";
if (open.ShowDialog()== DialogResult.OK)
{
des.EncryptFile(open.FileName, open.FileName);
MessageBox.Show("加密成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}

}

private void btn_wjjiemi_Click(object sender, EventArgs e)
{
OpenFileDialog open = new OpenFileDialog();
open.InitialDirectory = @"d:\";
open.Filter = "文本文件(*.txt,*.doc,*.xls)|*.txt;*.doc;*.xls";
if (open.ShowDialog() == DialogResult.OK)
{
des.DecryptFile(open.FileName);
MessageBox.Show("解密成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}

}

private void button1_Click(object sender, EventArgs e)
{
zifu.setmisi1 = textBox4.Text.Trim();
zifu.setmisi2 = textBox5.Text.Trim();
des = new ZU14.DES();
}
}
}
上面的代码是窗体的
下面是调用的两个类的
using System;
using System.Collections.Generic;
using System.Text;

namespace ZU14
{
class zifu
{
private static string misi1;
private static string misi2;
public static string getmisi1
{
get
{
return misi1;
}
}
public static string setmisi1
{
set
{
misi1 = value;
}
}
public static string getmisi2
{
get
{
return misi2;
}
}
public static string setmisi2
{
set
{
misi2 = value;
}
}
}
}

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

namespace ZU14
{
class DES
{

string iv =zifu.getmisi1; //"1234的yza";
string key = zifu.getmisi2;//"123在yzb";

/// <summary>
/// DES加密偏移量,必须是>=8位长的字符串
/// </summary>
public string IV
{
get { return iv; }
set { iv = value; }
}

/// <summary>
/// DES加密的私钥,必须是8位长的字符串
/// </summary>
public string Key
{
get { return key; }
set { key = value; }
}

/// <summary>
/// 对字符串进行DES加密
/// </summary>
/// <param name="sourceString">待加密的字符串</param>
/// <returns>加密后的BASE64编码的字符串</returns>
public string Encrypt(string sourceString)
{
byte[] btKey = Encoding.Default.GetBytes(key);
byte[] btIV = Encoding.Default.GetBytes(iv);
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
using (MemoryStream ms = new MemoryStream())
{
byte[] inData = Encoding.Default.GetBytes(sourceString);
try
{
using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(btKey, btIV), CryptoStreamMode.Write))
{
cs.Write(inData, 0, inData.Length);
cs.FlushFinalBlock();
}

return Convert.ToBase64String(ms.ToArray());
}
catch
{
throw;
}
}
}

/// <summary>
/// 对DES加密后的字符串进行解密
/// </summary>
/// <param name="encryptedString">待解密的字符串</param>
/// <returns>解密后的字符串</returns>
public string Decrypt(string encryptedString)
{
byte[] btKey = Encoding.Default.GetBytes(key);
byte[] btIV = Encoding.Default.GetBytes(iv);
DESCryptoServiceProvider des = new DESCryptoServiceProvider();

using (MemoryStream ms = new MemoryStream())
{
byte[] inData = Convert.FromBase64String(encryptedString);
try
{
using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(btKey, btIV), CryptoStreamMode.Write))
{
cs.Write(inData, 0, inData.Length);
cs.FlushFinalBlock();
}

return Encoding.Default.GetString(ms.ToArray());
}
catch
{
throw;
}
}
}

/// <summary>
/// 对文件内容进行DES加密
/// </summary>
/// <param name="sourceFile">待加密的文件绝对路径</param>
/// <param name="destFile">加密后的文件保存的绝对路径</param>
public void EncryptFile(string sourceFile, string destFile)
{
if (!File.Exists(sourceFile)) throw new FileNotFoundException("指定的文件路径不存在!", sourceFile);

byte[] btKey = Encoding.Default.GetBytes(key);
byte[] btIV = Encoding.Default.GetBytes(iv);
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
byte[] btFile = File.ReadAllBytes(sourceFile);

using (FileStream fs = new FileStream(destFile, FileMode.Create, FileAccess.Write))
{
try
{
using (CryptoStream cs = new CryptoStream(fs, des.CreateEncryptor(btKey, btIV), CryptoStreamMode.Write))
{
cs.Write(btFile, 0, btFile.Length);
cs.FlushFinalBlock();
}
}
catch
{
// throw;
}
finally
{
fs.Close();
}
}
}

/// <summary>
/// 对文件内容进行DES加密,加密后覆盖掉原来的文件
/// </summary>
/// <param name="sourceFile">待加密的文件的绝对路径</param>
public void EncryptFile(string sourceFile)
{
EncryptFile(sourceFile, sourceFile);
}

/// <summary>
/// 对文件内容进行DES解密
/// </summary>
/// <param name="sourceFile">待解密的文件绝对路径</param>
/// <param name="destFile">解密后的文件保存的绝对路径</param>
public void DecryptFile(string sourceFile, string destFile)
{
if (!File.Exists(sourceFile)) throw new FileNotFoundException("指定的文件路径不存在!", sourceFile);

byte[] btKey = Encoding.Default.GetBytes(key);
byte[] btIV = Encoding.Default.GetBytes(iv);
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
byte[] btFile = File.ReadAllBytes(sourceFile);

using (FileStream fs = new FileStream(destFile, FileMode.Create, FileAccess.Write))
{
try
{
using (CryptoStream cs = new CryptoStream(fs, des.CreateDecryptor(btKey, btIV), CryptoStreamMode.Write))
{
cs.Write(btFile, 0, btFile.Length);
cs.FlushFinalBlock();
}
}
catch
{
// MessageBox.Show(ex.Message);
//throw;
}
finally
{
fs.Close();
}
}
}

/// <summary>
/// 对文件内容进行DES解密,加密后覆盖掉原来的文件
/// </summary>
/// <param name="sourceFile">待解密的文件的绝对路径</param>
public void DecryptFile(string sourceFile)
{
DecryptFile(sourceFile, sourceFile);
}

}
}
有什么看不明白的,再联系我,我的账号就是我的QQ
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-07-21
这是csdn上高手 周公 的博文(DES加密解密),你看看,很有价值。

地址:http://blog.csdn.net/zhoufoxcn/archive/2007/01/29/1497095.aspx

里面只是加密解密的源代码 ,你要winform的,直接将这些加密解密代码放到你的winform程序里面就行,将要加密的字符串从你的textbox种获取就行。

VS中用C#编写一个DES(或3DES)加解密的Windows应用程序
窗体中设三个TextBox,用来输入八字节的明文(或密文)、密钥和输出加密(或解密)后的数据(都是十六进制数据);设两个Button,分别为加密和解密。初学者求码,谢谢!谢谢1.2楼的回答!... 窗体中设三个TextBox,用来输入八字节的明文(或密文)、密钥和输出加密(或解密)后的数据(都是十六进制数据);设两个Button,分别为...

C#与JAVA的DES加密解密
加密过程本来就是只需要明文和密钥,C#估计只是多给一个参数罢了。。。看看文档去 什么叫“初始化向量”?我记得上密码学的时候DES里面没有这个概念~~~DES算法流程就是固定的。可变的只有P盒和S盒。不知道你说的“初始化向量”是不是S盒 加密和解密只是密钥扩展的顺序颠倒,其他算法完全一样。P盒不...

求c# 具体的 3des双倍加密算法 跪求~~~
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.IO;using System.Security.Cryptography;namespace Rare.Card.Libary.Security{ \/\/\/ \/\/\/ 构造一个对称算法,使用3Des加密 \/\/\/如果当前的 Key 属性为 NULL,可调用 GenerateKey 方法以创建新的...

C#加密Java解密
一个是C#采用CBC Mode,PKCS7 Padding,Java采用CBC Mode,PKCS5Padding Padding,另一个是C#采用ECB Mode,PKCS7 Padding,Java采用ECB Mode,PKCS5Padding Padding,Java的ECB模式不需要IV 对字符加密时,双方采用的都是UTF-8编码 C# 代码 \/\/\/ \/\/\/ DES3加密解密 \/\/\/ public class Des3 { regio...

C#3des加密时候需要密钥
64位的任意密钥,也就是8个字符 你可以传一个 12345678,也可以传 asdfghjk 你解密的时候也要用相应的密钥如:12345678 解密

C# 3des解密后,为什么后面会多了几个\\0\\0\\0\\0
\\0是字符串的结尾标志,存储在字符串的结尾。你转换时字符串长度不够8位,系统默认加上\\0来填充。public static string Decrypt3DES(string strString){ try { DESCryptoServiceProvider DES = new DESCryptoServiceProvider();DES.Key = Encoding.UTF8.GetBytes("12345678");DES.Mode = CipherMode....

java 3des 密钥是多少位
3DES算法是指使用双长度(16字节)密钥K=(KL||KR)将8字节明文数据块进行3次DES加密\/解密。如下所示: Y = DES(KL)[DES-1(KR)[DES(KL[X])]] 解密方式为: X = DES-1 (KL)[DES (KR)[ DES-1 (KL[Y])]] 其中,DES(KL[X])表示用密钥K对数据X进行DES加密,DES-1 (KL[Y])表示用密钥K对数据Y...

java中的rsa\\des算法的方法
任意产生的信息解密,不对自己一无所知的信息签名;另一条是决不 对陌生人送来的随机文档签名,签名时首先使用One-Way HashFunction 对文档作HASH处理,或同时使用不同的签名算法。在中提到了几种不 同类型的攻击方法。RSA的公共模数攻击。若系统中共有一个模数,只是不同的人拥有不同的e和d,系统将...

接口协议有哪些
这类协议主要包括Windows套接字(Socket,用于开发网络应用程序)、远程调用、NetBIOS协议(用于建立逻辑名和网络上的会话)和网络动态数据交换(Network,用于通过网络共享嵌入在文本中的信息)。 ・基本的TCP\/IP协议互连应用协议 主要包括finger、ftp、rep、rsh、telnet、tftp等协议。这些工具协议使得Windows系统用户使用非...

怎么用C#解密 Java写的3des加密 ~~~密钥是48位的。
3DES 的密钥不可能48bit吧,那安全性比普通DES更差。密钥高于56bit 用相同的块操作模式CBC、ECB等 用相同的补齐方式,PKCS5\/7 密钥用相同的 散列函数 或扩张函数。比如 md5 ,sha1 各方面一致,c#,java#可以互转无误的。

相似回答
大家正在搜