1. 实验目的
² 熟悉安全算法在聊天程序中的作用与实现
² 调试安全算法的动态链接库实现,聊天客户及服务器端的实现
² 设计安全算法在聊天过程中的加密以及验证过程,实现加密通信和通信内容的数字验证
2. 实验环境
程序设计语言:C++ 0x
程序开发环境:Windows 732bit + Microsoft Visual C++ 2010 + Qt 4.7
安全算法:RSA、DES、SHA1
3. 实验内容
主要流程:
图1 Sever和Client加密通信过程
主要方法:
1) 通信机制主要采用Qt中的TCP/IP通信机制,建立服务器端和客户端,同时,服务器采用监听的机制,对网络进行监听,以获得客户端的连接;客户端利用不同的用户名与服务器端建立连接,登陆服务器端
- 1. void CryptClient::processPendingDatagrams()//监听函数
- 2. {
- 3. QByteArray datagram;
- 4. do {
- 5. datagram.resize(CudpSocketRec.pendingDatagramSize());
- 6. CudpSocketRec.readDatagram(datagram.data(), datagram.size());
- 7. } while(CudpSocketRec.hasPendingDatagrams());
- 8. QString recdata;
- 9. QDataStream in(&datagram, QIODevice::ReadOnly);
- 10. in.setVersion(QDataStream::Qt_4_7);
- 11. in >>rsa_pubkey_encrypt_deskey>>des_en_result>>rsa_pubkey_encrypt_sha1digest;
- 12. Decrypt_DES_EncryptedText();
- 13. }
- 14. void CryptClient::sendDatagram(QString sendData1, QString sendData2)//数据发送函数
- 15. {
- 16. QByteArray datagram;
- 17. QDataStream out(&datagram, QIODevice::WriteOnly);
- 18. out.setVersion(QDataStream::Qt_4_7);
- 19. out<<sendData1<<sendData2<<des_en_result;
- 20. CudpSocketSend.writeDatagram(datagram, QHostAddress::LocalHost, 5824);
- 21. }
通信过程如图1所示,其主要流程如下:
① 由Client端产生RSA密钥,包括公钥和私钥,将公钥发送到Sever端;
② 收到RSA公钥的Sever端利用公钥加密AES的密钥(为了程序的简化,固化在程序中)发送到Client端;
③ 收到加密后的DES密钥的Client端利用自己的RSA私钥将AES密钥解密出来,这样双方便可以进行基于DES加密的密文通信
④ 利用SHA1算法对通信的明文产生验证消息,将验证消息经过RSA加密之后,双发互相发送,以验证加密密文在传送过程中未被破坏。
其中,RSA、DES、SHA1三个算法已经被封装成了动态链接库(DLL)的形式,各个算法的程序可实现都有各自的说明文档,如有需要敬请查阅。说明文档中由于是html格式的,打开的时候请打开index.htm。