互联网高级技术文档格式.docx

上传人:b****6 文档编号:21106334 上传时间:2023-01-27 格式:DOCX 页数:20 大小:132.97KB
下载 相关 举报
互联网高级技术文档格式.docx_第1页
第1页 / 共20页
互联网高级技术文档格式.docx_第2页
第2页 / 共20页
互联网高级技术文档格式.docx_第3页
第3页 / 共20页
互联网高级技术文档格式.docx_第4页
第4页 / 共20页
互联网高级技术文档格式.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

互联网高级技术文档格式.docx

《互联网高级技术文档格式.docx》由会员分享,可在线阅读,更多相关《互联网高级技术文档格式.docx(20页珍藏版)》请在冰豆网上搜索。

互联网高级技术文档格式.docx

张启坤

文档撰写人:

符豪

文档撰写时间:

2016年6月29日

工作记录情况

名称

时间

是否完成

工作情况

密钥协商聊天器

06-25

查阅资料,程序测试

06-27

代码编写,调试

1实验目的与任务

实验目的:

1)两个或多个实体协商,共同建立会话密钥,任何一个参与者均对结果产生影响。

2)会话密钥由每个协议参与者分别产生的参数通过一定的计算得出。

3)锻炼编程能力,提高编程水平,积累编程经验。

4)学会基本的算法思想在网络路由选择的实现。

5)能够对局域网内通信的消息进行加密传输,防止他人窃取,还可以进行通信双方的身份认证,实行数字签名过程.

实验任务:

1)编写图形界面程序,利用产生密钥算法实现,生成通信的彼此的会话密钥;

2)规划程序界面,进行合理的布局;

3)书写算法代码,并对常规算法进行优化,提高算法的效率和稳定性;

4)正确运行程序,上传程序代码,提交实验报告。

2实验环境与设备

1)安装Windows操作系统的PC机一台

2)MicrosoftVisualStudio2012

3).netframework框架4.0.

4)office

3实验内容与步骤

3.1实验内容与要求

实验内容;

用编程语言完成下列三个

1)局域网内相互通信

2)保证通信时的可靠性

3)进行密钥协商保证通话的信息安全

实验要求:

采用适当的界面处理同处于局域网的所有客户端进行通信,展现通信的全过程,保证通信的可靠性以及准确性。

3.2实现功能

1)建立通信的安全连接,输入用户名和密码登录系统,然后对整个局域网内广播;

2)显示本组通信的所有人员的信息情况,根据连接的先后时间顺序排序;

3)显示本组的所任组员的通信情况,以及信息的展示功能;

4)密钥协商功能,并对协商的密钥进行验证是否合法,之后再通信中使用;

5)对于异常输入的做法,提出错误报告。

3.3测试用例

用C#编程语言编写窗体程序,打开程序如图:

客户端

服务器

点击“分发密钥”,将上图转换到程序中,如下图:

让后进行密钥协商,和相互通信。

3.4问题分析

密钥协商协议的生成方式:

可分为证书型和无证书型。

证书型是指在会话密钥的产生过程中,由一个可信的证书中心(CA)给参与密钥协商的各方各分发一个证书,此证书中含有此方的公钥,ID及其他信息。

证书型密钥协商协议的优点是提供认证,目前PKI(公钥密码体制)广泛部署,比较成熟,应用面广,且由PKG管理公私钥对有利于统一管理,缺点是计算代价大,需要一个可信的CA,同时证书还需要维护。

无证书型是指各方在进行会话密钥的协商过程中不需要证书的参与,这是目前密钥协商协议的主流种类,优点是不需要CA的参与,减少了计算量,尤其是在低耗环境下应用的更多,同时安全性也不比证书型弱。

几乎没有明显的缺点,只是设计一个安全的更加低耗的无证书密钥协商方案不是很容易。

4总结

在此对这次试验进行总结如下:

在试验的过程中,难点就在于对密钥协商的处理,以及节点与节点之间和如何寻找节点之间的可靠通信节点。

这就对数据结构和算法有一定的理解,尤其对通信的可靠性和稳定性,还要参考整个通信的全过程情况进行模拟。

这也对编程语言有很高的要求。

这次实验中主要运用密钥协商算法,尽管可以在网上获取有关该算法的源码,但是在整个编程过程中,还是出现不少的问题,例如;

1.密钥如何生成和分配的问题。

2.寻找路径算法的编写和代码的优化。

3.如何维持程序的稳定性和健壮性。

4.针对输入输出的错误操作,如何提出异常处理。

5.对整个程序的代码精减,增强扩展性。

5参考文献

网络通信ThomasH.Cormen机械工业出版社2013.01

数据结构与算法分析(C语言描述)MarkAllenWeiss机械工业出版社2004.01

C#4.0严蔚敏编著清华大学出版社,2002.05

大话C#网络程杰清华大学出版社,2011.06

C#高级编程(第9版)ChristianNagel清华大学出版社,2015.01

6附录

主要代码

usingSystem;

usingSystem.Collections.Generic;

usingSystem.ComponentModel;

usingSystem.Data;

usingSystem.Drawing;

usingSystem.Linq;

usingSystem.Text;

usingSystem.Windows.Forms;

usingSystem.Net;

usingSystem.Net.Sockets;

usingSystem.Threading;

namespaceGroupCommunication

{

publicpartialclassGroupForm:

Form

{

//生成随机数

privateRandomrandom;

//组播地址

privateIPAddressgroupbroadcastIP=IPAddress.Parse("

224.100.0.1"

);

//端口号

privateintPORT=8001;

//UDP监听对象

privateUdpClientUDPListener;

//跨线程调用控件枚举定义

privateenumListBoxItemOperation{Add,Remove};

//跨线程调用控件委托定义

privatedelegatevoidSetListBoxItemCallback(stringitem,ListBoxlistBox,ListBoxItemOperationoperation);

privatedelegatevoidSetButtonEnableCallback(boolenable,Buttonbutton);

//定义委托对象

privateSetListBoxItemCallbacklistBoxItemCallback;

privateSetButtonEnableCallbackbuttonEnableCallback;

//密钥因子存放字典>

key:

username;

value:

element;

privateDictionary<

string,int>

keyElement=newDictionary<

();

//hash验证字符数组

string,string>

hashverifygroup=newDictionary<

string,string>

();

publicGroupForm()

InitializeComponent();

this.skinEngine1.SkinFile=Application.StartupPath+@"

\Skins\Wave.ssk"

;

//随机生成用户名

username_llbl.Text=string.Empty;

random=newRandom();

username_llbl.Text="

user["

+random.Next(1,10000).ToString()+"

]"

//username_llbl.Text="

符豪"

//委托添加订阅

listBoxItemCallback=newSetListBoxItemCallback(SetListBoxItem);

buttonEnableCallback=newSetButtonEnableCallback(SetButtonEnable);

}

///<

summary>

///接收线程

/summary>

privatevoidReceiveMessage()

UDPListener=newUdpClient(PORT);

//必须使用组播地址范围内的地址

UDPListener.JoinMulticastGroup(groupbroadcastIP);

UDPListener.Ttl=50;

IPEndPointremote=null;

while(true)

try

//关闭UDPListener时此句会产生异常

byte[]bytes=UDPListener.Receive(refremote);

//接收数据

stringreceivestring=Encoding.UTF8.GetString(bytes,0,bytes.Length);

string[]splitString=receivestring.Split('

'

switch(splitString[0])

case"

Login"

:

//进入群组会议室

SetListBoxItem(

string.Format("

[{0}]进入!

"

splitString[1]),message_lbx,ListBoxItemOperation.Add);

stringuserListString="

List,"

+splitString[1];

for(inti=0;

i<

userlist_lbx.Items.Count;

i++)

userListString+="

"

+userlist_lbx.Items[i].ToString();

SendToMuliCastForUser(userListString);

break;

List"

//参加会议人员名单

for(inti=1;

splitString.Length;

SetListBoxItem(splitString[i],userlist_lbx,ListBoxItemOperation.Add);

KeyElement"

[{0}]发送:

{1}"

splitString[1],splitString[2]),message_lbx,ListBoxItemOperation.Add);

AddKeyElement(splitString[1],Convert.ToInt32(splitString[2]));

if(keyElement.Count==2)

SendToMuliCastForUser("

WaitVerify,true"

WaitVerify"

if(splitString[1].Equals("

true"

))

请验证密钥"

),message_lbx,ListBoxItemOperation.Add);

SetButtonEnable(true,agreekey_btn);

KeyVerify"

if(userlist_lbx.Items.Contains(splitString[1]))

hashverifygroup.Add(splitString[1],splitString[2]);

if(hashverifygroup.Count==2)

if(VerifyKeyHsah())

MessageBox.Show("

密钥验证成功"

SetListBoxItem(string.Format("

SetButtonEnable(false,keyverify_btn);

SetButtonEnable(true,decrypt_btn);

SetButtonEnable(true,encrypt_btn);

SetButtonEnable(true,sendmessage_btn);

else

密钥验证失败"

Message"

//发言内容

SetListBoxItem(receivestring,message_lbx,ListBoxItemOperation.Add);

Logout"

//退出进群组会议室

[{0}]退出!

SetListBoxItem(splitString[1],userlist_lbx,ListBoxItemOperation.Remove);

catch

//退出循环,结束线程

///发送数据

paramname="

message"

>

<

/param>

privatevoidSendToMuliCastForUser(stringmessage)

UdpClientSENDUdpClient=newUdpClient();

//允许发送和接收广播数据报

SENDUdpClient.EnableBroadcast=true;

IPEndPointiep=newIPEndPoint(groupbroadcastIP,PORT);

//将发送内容转换为字节数组

byte[]bytes=System.Text.Encoding.UTF8.GetBytes(message);

//向子网发送信息

SENDUdpClient.Send(bytes,bytes.Length,iep);

catch(Exceptionerr)

MessageBox.Show(err.Message,"

发送失败"

finally

SENDUdpClient.Close();

///存储密钥因子

username"

element"

privatevoidAddKeyElement(stringusername,intelement)

if(keyElement.Count>

=4)return;

if(!

keyElement.ContainsKey(username))

keyElement.Add(username,element);

keyElement.Add(username+"

00"

element);

privatestringGetKey()

int[]keyelement=newint[2];

inti=0;

foreach(intvalueinkeyElement.Values)

keyelement[i]=value;

i++;

inttemp;

for(intj=0;

j<

3;

j++)

for(intk=0;

k<

k-j-1;

k++)

if(keyelement[k]>

keyelement[k+1])

//交换数

temp=keyelement[k];

keyelement[k]=keyelement[k+1];

keyelement[k+1]=temp;

returnkeyelement[0].ToString()+keyelement[1].ToString();

///验证hash后的密钥

returns>

/returns>

privateboolVerifyKeyHsah()

stringkeyhash=DESData.Key_DES.GetHashCode().ToString();

foreach(stringvalueinhashverifygroup.Values)

if(keyhash!

=value)

returnfalse;

returntrue;

///跨线程调用的方法

item"

listBox"

operation"

privatevoidSetListBoxItem(stringitem,ListBoxlistBox,ListBoxItemOperationoperation)

if(listBox.InvokeRequired==true)

this.Invoke(listBoxItemCallback,item,listBox,operation);

{//添加

if(operation==ListBoxItemOperation.Add)

if(listBox==userlist_lbx)

if(listBox.Items.Contains(item)==false)

listBox.Items.Add(item);

listBox.SelectedIndex=listBox.Items.Count-1;

listBox.ClearSelected();

elseif(operation==ListBoxItemOperation.Remove)

{//移除

listBox.Items.Remove(item);

///跨线程调用按钮属性

enable"

button"

privatevoidSetButtonEnable(boolenable,Buttonbutton)

if(button.InvokeRequired)

button.Invoke(buttonEnableCallback,enable,button);

button.Enabled=enable;

privatevoidlogin_btn_Click(objectsender,EventArgse)

Cursor.Current=Cursors.WaitCursor;

ThreadmyThread=newThread(newThreadStart(ReceiveMessage));

myThread.Start();

//等待接收线程准备完毕

Thread.Sleep(1000);

Login,"

+username_llbl.Text);

SetButtonEnable(false,login_btn);

SetButtonEnable(true,exit_btn);

SetButtonEnable(true,sendkey_btn);

privatevoidsendkey_btn_Click(objectsender,EventArgse)

intelement=random.Next(1000,9999);

KeyElement,"

+username_llbl.Text+"

+element.ToString());

SetButtonEnable(false,sendkey_btn);

privatevoidagreekey_btn_Click(objectsender,EventArgse)

DESData.Key_DES=GetKey();

已生成密钥!

SetButtonEnable(true,keyverify_btn);

catch{

密钥生成失败!

privatevoidkeyverify_btn_Click(objectsender,EventArgse)

KeyVerify,"

+username_llbl.Text+"

+

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 学科竞赛

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1