利用DotNET密码系统之一的DES对称加密算法保证数据安全
来源:互联网 发布:ibm 中化 云计算 编辑:程序博客网 时间:2024/05/16 01:38
/////////////////////////////////////////////////////////////
//Author: stardicky //
//E-mail: stardicky@hotmail.com //
//QQNumber: 9531511 //
//CompanyName: Ezone International //
//Class: HBS-0308 //
//title: 利用DotNET密码系统保证数据安全 //
/////////////////////////////////////////////////////////////
//注:利用DotNET密码系统之一的DES对称加密算法保证数据安全 //
/////////////////////////////////////////////////////////////
using System;
using System.IO;
using System.Text;
using System.Security.Cryptography;
namespace EzoneInternationalSecurityCryptography
{
class EzoneSecurityCryptographyDemo
{
[STAThread]
public static void Main(string[] args)
{
//加密数据(从内存到文件)
EzoneEncryptorDemo();
//解密数据(从文件到内存)
EzoneDecryptorDemo();
}
/// <summary>
/// 加密
/// </summary>
public static void EzoneEncryptorDemo()
{
//创建一个文件对象,文件的模式是创建新文件,文件的访问权限是可写!
FileStream fs=new FileStream("EzoneDemo.txt",FileMode.Create,FileAccess.Write);
Console.WriteLine("请输入你想要进行加密的字符串:");
//输入你想要进行加密的字符串
string YourInput=Console.ReadLine();
//将字符串转换成字节
byte[] YourInputStorage=System.Text.Encoding.UTF8.GetBytes(YourInput);
//创建一个DES算法的加密类
DESCryptoServiceProvider MyServiceProvider=new DESCryptoServiceProvider();
//从DES算法的加密类对象的CreateEncryptor方法,创建一个加密转换接口对象
//第一个参数的含义是:对称算法的机密密钥(长度为64位,也就是8个字节)
// 可以人工输入,也可以随机生成方法是:MyServiceProvider.GenerateKey();
//第二个参数的含义是:对称算法的初始化向量(长度为64位,也就是8个字节)
// 可以人工输入,也可以随机生成方法是:MyServiceProvider.GenerateIV();
ICryptoTransform MyTransform=MyServiceProvider.CreateEncryptor(new byte[]{100,110,120,130,100,110,120,130},new byte[]{100,110,120,130,100,110,120,130});
//CryptoStream对象的作用是将数据流连接到加密转换的流
CryptoStream MyCryptoStream=new CryptoStream(fs,MyTransform,CryptoStreamMode.Write);
//将字节数组中的数据写入到加密流中
MyCryptoStream.Write(YourInputStorage,0,YourInputStorage.Length);
//关闭加密流对象
MyCryptoStream.Close();
}
/// <summary>
/// 解密
/// </summary>
public static void EzoneDecryptorDemo()
{
FileStream fs=new FileStream("EzoneDemo.txt",FileMode.Open,FileAccess.Read);
DESCryptoServiceProvider MyServiceProvider=new DESCryptoServiceProvider();
//从DES算法的加密类对象的CreateEncryptor方法,创建一个解密转换接口对象
//[对称算法的机密密钥]必须是加密时候的[对称算法的机密密钥]
//[对称算法的初始化向量]必须是加密时候的[对称算法的初始化向量]
//如果不一样,则会抛出一个异常。
ICryptoTransform MyTransform=MyServiceProvider.CreateDecryptor(new byte[]{100,110,120,130,100,110,120,130},new byte[]{100,110,120,130,100,110,120,130});
CryptoStream MyCryptoStream=new CryptoStream(fs,MyTransform,CryptoStreamMode.Read);
byte[] YourInputStorage=new byte[1000];
int len=MyCryptoStream.Read(YourInputStorage,0,YourInputStorage.Length);
Console.WriteLine("你刚才输入的字符串是:");
Console.WriteLine(System.Text.Encoding.UTF8.GetString(YourInputStorage,0,len));
}
}
}
---------------------------------------------------------------------------------------------------------------------------------------------------
一个非常有趣的例子!
/////////////////////////////////////////////////////////////
//Author: stardicky //
//E-mail: stardicky@hotmail.com //
//QQNumber: 9531511 //
//Company: Ezone International //
//Class: HBS-0308 //
//title: 利用密码系统保证数据安全 //
/////////////////////////////////////////////////////////////
//介绍: //
// 这是一个非常有趣的例子! //
// 在Ezone International公司里Ting是Dicky的女友,Viisen是//
//他们的上级.Viisen不允许公司内部员工谈恋爱,上有政策,下有对//
//策,Ting和Dicky利用空闲时间通过邮件的方式与对方通讯,Viisen//
//下发任务给Dicky的方式也是通过发送邮件.为了保存邮件的安全 //
//性,邮件采用RC2(对称加密)加密方式进行发送,RC2的密钥经过RSA//
//(非对称加密)的加密.Ting,Dicky和Viisen各自有一对公钥和密钥//
//.Ting和Dicky的通讯内容对于Viisen是不可见的,Dicky和Viisen //
//的通讯内容对于Ting是不可见的. //
/////////////////////////////////////////////////////////////
using System;
using System.IO;
using System.Text;
using System.Security.Cryptography;
namespace EzoneSecuritySystem
{
class EzoneSecurityDemo
{
//创建三个员工对象,分别是 Dicky, Ting, Viisen
public static EzonePerson Dicky=new EzonePerson("Dicky");
public static EzonePerson Ting=new EzonePerson("Ting");
public static EzonePerson Viisen=new EzonePerson("Viisen");
[STAThread]
public static void Main(string[] args)
{
Console.WriteLine("==================== 场景一: Dicky给自己发送邮件消息 ====================");
Scene_1();
Console.WriteLine("=========================================================================");
Console.Write("按任意键继续......");
Console.In.ReadLine();
Console.WriteLine("==================== 场景二: Dicky给Ting发送邮件消息 ====================");
Scene_2();
Console.WriteLine("=========================================================================");
Console.Write("按任意键继续......");
Console.In.ReadLine();
Console.WriteLine("================ 场景三: Dicky给Ting ,Viisen发送邮件消息 ================");
Scene_3();
Console.WriteLine("=========================================================================");
Console.Write("按任意键继续......");
Console.In.ReadLine();
}
/// <summary>
/// Dicky给自己发送邮件消息
/// </summary>
public static void Scene_1()
{
Console.WriteLine("Dicky用自己的公钥加密信息");
EzoneMessage DickyMessage=Dicky.EncryptMessage("我今天努力了吗?");
Console.WriteLine(System.Environment.NewLine);
Console.WriteLine("Dicky用自己的私钥解密消息");
Dicky.DecryptMessage(DickyMessage);
Console.WriteLine(System.Environment.NewLine);
Console.WriteLine("Viisen试图用自己的私钥解密消息");
Viisen.DecryptMessage(DickyMessage);
Console.WriteLine(System.Environment.NewLine);
}
/// <summary>
/// Dicky给Ting发送邮件消息
/// </summary>
public static void Scene_2()
{
Console.WriteLine("Dicky获得Ting的公钥");
Dicky.GetPublicKey(Ting);
Console.WriteLine(System.Environment.NewLine);
Console.WriteLine("Dicky用Ting的公钥加密信息");
EzoneMessage TingMessage=Dicky.EncryptMessage("今晚一起吃饭好吗?");
Console.WriteLine(System.Environment.NewLine);
Console.WriteLine("Ting用自己的私钥解密信息");
Ting.DecryptMessage(TingMessage);
Console.WriteLine(System.Environment.NewLine);
Console.WriteLine("Viisen试图用自己的私钥解密消息");
Viisen.DecryptMessage(TingMessage);
Console.WriteLine(System.Environment.NewLine);
}
/// <summary>
/// Dicky给Ting,Viisen发送邮件消息
/// </summary>
public static void Scene_3()
{
Console.WriteLine("Dicky获得Ting的公钥");
Dicky.GetPublicKey(Ting);
Console.WriteLine(System.Environment.NewLine);
Console.WriteLine("Dicky用Ting的公钥加密信息");
EzoneMessage TingMessage=Dicky.EncryptMessage("I love you!");
Console.WriteLine(System.Environment.NewLine);
Console.WriteLine("Dicky获得Viisen的公钥");
Dicky.GetPublicKey(Viisen);
Console.WriteLine(System.Environment.NewLine);
Console.WriteLine("Dicky用Viisen的公钥加密信息");
EzoneMessage ViisenMessage=Dicky.EncryptMessage("2003年度的财务总结报告放在你的办公桌上!");
Console.WriteLine(System.Environment.NewLine);
Console.WriteLine("Ting用自己的私钥解密信息");
Ting.DecryptMessage(TingMessage);
Console.WriteLine(System.Environment.NewLine);
Console.WriteLine("Viisen用自己的私钥解密信息");
Viisen.DecryptMessage(ViisenMessage);
Console.WriteLine(System.Environment.NewLine);
}
}
//邮件对象
class EzoneMessage
{
public byte[] MessageBody;//邮件内容(内容通过RC2(对称加密)加密过的)
public byte[] RC2Key; //RC2的密钥(通过RSA(非对称加密)加密过的)
public byte[] RC2IV; //RC2的初始化向量
}
//员工对象
class EzonePerson
{
//RSA(非对称加密对象)
private RSACryptoServiceProvider EzoneRSA;
//RC2(对称机密对象)
private RC2CryptoServiceProvider EzoneRC2;
//员工姓名
private string Name;
//Person构造方法
public EzonePerson(string Name)
{
//初始化成员对象
this.EzoneRSA=new RSACryptoServiceProvider();
this.EzoneRC2=new RC2CryptoServiceProvider();
this.Name=Name;
}
//发送公钥
public RSAParameters SendPublicKey()
{
//RSA的公钥和密钥对象
RSAParameters result=new RSAParameters();
//导出EzoneRSA的公钥(false 表示不导出私钥)
result=this.EzoneRSA.ExportParameters(false);
return result;
}
//获得公钥
public void GetPublicKey(EzonePerson Obj)
{
//导入 EzonePerson对象 的公钥
this.EzoneRSA.ImportParameters(Obj.SendPublicKey());
}
//加密邮件
public EzoneMessage EncryptMessage(string text)
{
EzoneMessage MessageObj=new EzoneMessage();
//将消息从字符串的形式转换成字节数组的形式
byte[] MessageBytes=System.Text.Encoding.UTF8.GetBytes(text);
//随机创建RC2的密钥
this.EzoneRC2.GenerateKey();
//随机创建RC2的初始化向量
this.EzoneRC2.GenerateIV();
//用RSA加密RC2的密钥,并赋值给消息对象的RC2的密钥匙(false 表示不用OAEP进行填充,只有WinXp以上版本的*作系统才支持)
MessageObj.RC2Key=this.EzoneRSA.Encrypt(this.EzoneRC2.Key,false);
//给消息对象的RC2的向量赋值
MessageObj.RC2IV=this.EzoneRC2.IV;
//创建一个加密对象
ICryptoTransform MyEncryptor=this.EzoneRC2.CreateEncryptor();
//创建一个内存流
MemoryStream EzoneMemoryStream=new MemoryStream();
//在内存流的基础上创建一个加密流对象
CryptoStream MyEncryptoStream=new CryptoStream(EzoneMemoryStream,MyEncryptor,CryptoStreamMode.Write);
//向加密流中写入邮件内容
MyEncryptoStream.Write(MessageBytes,0,MessageBytes.Length);
//刷新加密流的缓冲区
MyEncryptoStream.FlushFinalBlock();
//给消息对象的MessageBody(消息主体)赋值(经过RC2加密过的字节数组)
MessageObj.MessageBody=EzoneMemoryStream.ToArray();
EzoneMemoryStream.Close();
MyEncryptoStream.Close();
//返回EzoneMessage对象
return MessageObj;
}
//解密邮件
public void DecryptMessage(EzoneMessage obj)
{
this.EzoneRC2.IV=obj.RC2IV;
try
{
//用RSA解密RC2的密钥(false 表示不用OAEP进行填充,只有WinXp以上版本的*作系统才支持)
this.EzoneRC2.Key=this.EzoneRSA.Decrypt(obj.RC2Key,false);
}
catch(CryptographicException e)
{
Console.WriteLine("解密失败: "+e.Message);
return;
}
//创建一个解密对象
ICryptoTransform MyDecryptor=this.EzoneRC2.CreateDecryptor();
//创建一个内存流,用obj的邮件消息初始化内存流!
MemoryStream EzoneMemoryStream=new MemoryStream(obj.MessageBody);
//在内存流的基础上创建一个解密流对象
CryptoStream MyDecryptoStream=new CryptoStream(EzoneMemoryStream,MyDecryptor,CryptoStreamMode.Read);
//存储解密后的邮件内容
byte[] MessageText=new byte[obj.MessageBody.Length];
//从解密流解密数据,并把解密过的数据写入到MessageText字节数组中
MyDecryptoStream.Read(MessageText,0,MessageText.Length);
EzoneMemoryStream.Close();
MyDecryptoStream.Close();
Console.WriteLine("解密成功:"+System.Text.Encoding.UTF8.GetString(MessageText));
}
}
}
- 利用DotNET密码系统之一的DES对称加密算法保证数据安全
- 利用DotNET密码系统之一的DES对称加密算法保证数据安全
- DotNET密码系统之一的DES对称加密算法保证数据安全
- 利用DotNET密码系统保证数据安全
- 利用DotNET密码系统保证数据安全
- 20141103 【 信息安全 】 对称密码体系 —— DES 加密算法
- des对称加密算法的实现
- 对称加密算法----DES加密算法
- Java实现的 DES对称加密算法
- 加密篇之一 - 对称加密算法 DES,AES,PBE
- 信息安全实验:对称加密算法DES之DES_ecb_encrypt()中密钥key的生成
- 对称加密算法DES实现
- 3DES对称加密算法
- DES对称加密算法
- 对称加密算法DES
- DES对称加密算法
- DES对称加密算法 CryptoUitls
- DES ~ 对称加密算法
- Constraint Programming in Oz
- Coalesys PanelBar + R.a.d Treeview +Xml 构建的Asp.net 菜单和权限管理模块
- 網路上出現的急速革新和應用發展現在將同樣發生在電話工業上——《开源软件Asterisk:386变身交换机》
- [asp.net]頁面列印9/20
- Move on
- 利用DotNET密码系统之一的DES对称加密算法保证数据安全
- 深入理解硬盘的Linux分区
- asp.net为图片增加自己的版权信息
- 国学大师王国维先生的三重境界
- 动态创建消息响应函数
- iptables NAT
- 错误处理
- 生活指南:计算机族必喝的健康饮料
- 使用Vs2003开发,Html代码格式排列零乱的问题!