欢迎来到天天文库
浏览记录
ID:31534435
大小:126.02 KB
页数:12页
时间:2019-01-13
《安全算法在p2p聊天程序中的应用》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、安全算法在P2P聊天程序中的应用一.实验目的本实验主要在P2P聊天程序中添加DES和SHA算法以使聊天过程中传输的数据是安全的。练习本实验的目的有以下几个方面:(1)掌握WINDOWSSOCKETAPI编程,能比较熟练的使用SOCKETAPI函数,深刻理解C/S模式;(2)掌握应用程序开发的一般流程;(3)另一方面深刻理解DES和SHA加密算法的原理和应用场合。二.程序流程图由于本软件无论客户端还是服务端都是同样的程序,因而软件的源代码的主要流程图与经典的客户端/服务器模式的流程图有些区别。下面给出了程序大致流程
2、图:开始Socket()Bind()Listen()未连接成功Connect()连接成功没有消息Accept()创建线程Recv()创建线程Send()Close()下面对上面的流程图作如下解释:程序启动后,先创建侦听套接字,然后绑定侦听套接字,接着进行侦听,上述步骤是典型服务器端的步骤。接着,创建创建一个客户端套接字,并与从窗口获取的服务器IP和端口进行连接。该步骤是典型客户端步骤。如果连接失败,说明本机作为服务器端,接着进行典型服务器端的操作Accept(),有连接消息则建立接收和发送线程。如果在Connec
3、t()时是成功的,则说明本机是客户机,接着进行的客户端的典型操作(即建立接收和发送线程)。通过上述步骤将客户端和服务器端的融合,就实现了客户端和服务器端的软件是同一个软件。而加解密算法分别添加到发送和接收线程调用的函数中。一.程序详细设计1.建立MFC工程中后,主要添加的文件及相关文件的解释建立MFC工程后,主要添加了MySocket.cpp,Des.cpp,Sha.cpp,sha1.cpp以及对应的文件和Stdin.h。下面对这些文件中的主要函数进行解释:MySocket.cpp和MySocket.h文件:文件
4、中主要定义了了MySocket类,该类继承CSocket类,并对以下函数进行重载:voidCMySocket::OnReceive(intnErrorCode){MessageBox(NULL,"有客户端信息","",MB_OKCANCEL);CSocket::OnReceive(nErrorCode);}voidCMySocket::OnConnect(intnErrorCode){MessageBox(NULL,"有客户端连接","",MB_OKCANCEL);CSocket::OnConnect(nErro
5、rCode);}voidCMySocket::Init(CChatDlg*dlg){dlg=dlg;}Des.cpp及Des.h文件:文件主要实现了DES加解密算法,并提供了一个统一的接口函数。boolDes_Go(char*Out,char*In,longdatalen,constchar*Key,intkeylen,boolType)该接口函数中参数说明:Out指向加解密后的字符串存放的位置;In指向需要要加解密字符串存放的位置;Datalen表示要加解密字符串的数据长度;Key表示加解密时所要用的密钥;Ke
6、ylen表示密钥长度;Type表示进行操作的类型:ENCRYPT表示加密,DECRYPT表示解密。Sha.cpp及Sha.h文件:文件主要通过调用sha1.cpp中的函数来实现SHA算法,并提供一个统一的接口函数。voidshaEncrypt(char*inputBuff,uint8_t*Message_Digest);该接口函数中参数说明:inputBuff指向需要进行摘要操作的字符串。Message_Digest指向进行摘要操作之后存放摘要的位置。Sha1.cpp,sha.h以及Stdin.h文件:上面三个文
7、件都是为Sha.cpp服务的。其中Stdin.h中主要是对进行一些数据类型的重新定义,使人在阅读代码时更加直观。Sha1.cpp和Sha1.h文件定义了一些数据结构及一些函数等:typedefstructSHA1Context{uint32_tIntermediate_Hash[SHA1HashSize/4];/*MessageDigest*/uint32_tLength_Low;/*Messagelengthinbits*/uint32_tLength_High;/*Messagelengthinbits*//
8、*Indexintomessageblockarray*/int_least16_tMessage_Block_Index;uint8_tMessage_Block[64];/*512-bitmessageblocks*/intComputed;/*Isthedigestcomputed?*/intCorrupted;/*Isthemessagedigestcorrupt
此文档下载收益归作者所有