国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

這是一個非常有趣的例子!(DotNET密碼系統)

2024-07-21 02:30:04
字體:
來源:轉載
供稿:網友

(億眾國際-009)[原創]這是一個非常有趣的例子!

/////////////////////////////////////////////////////////////
//author: stardicky //
//e-mail: [email protected] //
//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));
}
}
}



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 肇庆市| 桐乡市| 自治县| 洪洞县| 寿宁县| 故城县| 清徐县| 金湖县| 永宁县| 沛县| 潮安县| 油尖旺区| 蒙阴县| 长宁区| 凤台县| 杨浦区| 东辽县| 玉门市| 岑溪市| 北海市| 合阳县| 焦作市| 新疆| 本溪市| 安国市| 金秀| 上高县| 老河口市| 香河县| 云浮市| 甘肃省| 綦江县| 白朗县| 潼关县| 福泉市| 垦利县| 万山特区| 天全县| 满城县| 满洲里市| 铅山县|