具备正常的密钥管理功能,自己的私钥要加密,对方的公钥要存储保管,具备导入导出功能; 验证完备性,确保消息在传输过程中没有被更改。
2.数据库设计及基本实现原理
2.1 数据库设计 2.2 基本实现原理 2.2.1客户机/服务器模式
C#支持多种协议上的网络程序开发,比如TCP、UDP、和IP等等。由于这次课程设计是实现点到点的可靠连接,所以在此使用TCP连接方式。在这个连接中,双方分为客户和服务器,他们各自的功能不同。
基于TCP套接字编程三个步骤:服务器监听,客户端请求,连接确认。所谓服务器监听,是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。客户端请求,是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。连接确认,是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。
所以Socket接口的网络通讯原理:首先,服务端有一个进程(或多个进程)在指定的端口等待客户来连接,服务程序等待客户的连接信息,一旦连接上之后,就可以按设计的数据交换方法和格式进行数据传输。在使用TCP协议时,一般服务端进程先使用socket调用得到一个描述符,然后使用bind调用将一个名字与socket描述符连接起来,对于Internet域就是将Internet地址联编到socket。对于实例服务端用TcpListener监听,然后把连接的对象实例化为一个TcpClient,调用TcpClient.GetStream()方法,返回网络流实例化为一个NetworlStream流,然后进行Send,Receive。
客户机一方,TCP/IP应用程序功能如下:
(1) 打开通信信道(申请一套接字),并连接到服务器在主机的保留端口,该端口对应服务器的TCP/IP进程。
(2) 向服务器发出请求报文,等待接收应答。
(3) 从服务器方收到最终应答结果,或在不再请求时关闭信道并终止客户机进
程。
服务器一方,TCP/IP应用程序动作如下:
(1) 打开通信信道(申请一套接字),通知本地主机在某一保留端口接收客户机请求。
(2) 等待客户请求到达指定端口。
(3) 接收到请求,启动一新进程处理用户请求,同时释放旧进程以响应新的客户请求,一旦服务完成,关闭新进程与客户的通信链路。
(4) 继续等待客户机请求。
(5) 如果不想响应客户机请求,关闭服务器进程。
综上所述,TCP/IP应用中的服务器程序必须先于客户机进程启动,直到对客户机的响应结束或强迫终止。其面向连接的应用程序流程图如图2-1。
图2-1 C/S模式
2.2.2不对称加密与对称加密相结合的应用
不对称加密与对称加密各有优缺点,在本课题中,考虑到聊天软件的即时性,在消息传输中使用处理速度更快得对称加密,同时,使用不对称加密来传输对称密钥。
不对称加密解决了用对称加密传递信息必须传递密钥的问题,对于通过网络传递的数据来说,由于不对称加密无法使用流进行处理,因此在网络应用程序中,一般将对称加密和不对称加密配合使用。基本思想是:用不对称加密算法加密对称加密算法的密钥,用对称加密算法加密实际数据。
A希望向B传递加密数据,B首先生成一个不对称加密算法使用的公钥/密钥对,假定公钥过publicKey,私钥为privateKey,然后B将公钥publicKey通过网络传递给A;A接收到此公钥后,用它加密使用对称加密算法的密钥KEY和初始化向量IV,并将加密后的密钥KEY和初始化向量IV通过网络传递给B。这样,A和B都有了一个共同使用的对称加密的密钥,然后双方用此密钥加密数据,并将加密后的数据传递给对方,对方收到加密后的数据后,再用对称加密的密钥KEY和初始化向量IV解密数据。
具体实现的设计思路如下:
1,,客户端生成一个使用RSA算法的不对称加密的公钥/私钥对,通过TCP将公钥发送到服务器端;
2,服务器端用客户端发送的公钥初始化RSA对象。然后利用此对象加密使用tripleDES算法的对称加密的密钥;
3,服务器端将加密后的对称加密的密钥发送到客户端,客户端利用RSA的私钥解密tripleDES密钥,并用此密钥初始化tripleDES对象;
4,双方使用对称加密算法加密对话内容,并将加密后的对话内容发送到对方; 5,接收方接收到加密后的对话内容后,利用对称加密算法解密对话内容,并显示解密前和解密后的结果。
2.2.3 基于hash算法的数字签名
数字签名是利用不对称加密和hash算法共同实现的。本实验中,利用数字签名来保证消息的完整性。
发送方先使用hash算法对数据进行hash运算得到数据的hash值,然后将数据和hash值一块儿发送给接收方;接收方接收到数据和hash值后,对接收的数据进行和发送方相同的hash运算,然后将计算得到的hash值和接收的hash值进行比较,如果二者一致,说明收到的数据肯定与发送方的原始数据相同,从而保证数据的完整性。
使用RSACryptoServiceProvider类来实现数字签名,主要流程如下:
1,发送方先将发送的信息使用hash函数创建消息摘要,然后用私钥对信息摘要进行加密,以创建发送方的个人签名;
2,把个人签名和消息一起发送,接收方收到之后,使用发送方的公钥解密该签名,以恢复消息摘要,并使用发送方所用的hash算法对该消息进行hash运算;
3,如果接收方计算的消息摘要与收到的完全匹配,则接收方可以确保消息在传输过
程中没有被修改。
3.服务端及客户端编程实现
3.1服务端实现 3.2 客户端实现
4.网络安全编程实现
4.1 数据加密实现
发送方 网络流 接收方 网络流 发送加密的数据 读取数据量大小 字节序列 读取加密的数据 计算发送数据量 解密 加密 内存流 内存流 字节序列 数据 数据
相关推荐: