5.4   服务器端核心代码

http://www.paper51.com

图6 服务器完成初始化

http://www.paper51.com

图6为服务器初始化过程和为已登录用户服务的过程。服务器先生成RSA算法所需的公钥和私钥,当连接到来时服务器送出RSA公钥并等待用户回传DES密钥。当用户传回DES密钥后,服务器用RSA私钥解密得到DES密钥。此后用户登录信息由此DES密钥解密,用户发送的消息由服务器转发。 copyright paper51.com

l       线程函数,为登陆客户服务

内容来自论文无忧网 www.paper51.com

void service(int connfd, RSA rsa)

内容来自论文无忧网 www.paper51.com

{

内容来自论文无忧网 www.paper51.com

charbuf[MAXLINE]; 内容来自论文无忧网 www.paper51.com

user_login*login;

内容来自论文无忧网 www.paper51.com

int n,check;

内容来自www.paper51.com

unsignedlong long key; http://www.paper51.com

publickeypk; paper51.com

pk.e =rsa.e;

http://www.paper51.com

pk.n =rsa.n; paper51.com

send_rsa_publickey(connfd, pk); //发送RSA公钥

paper51.com

cout<< "公钥已送出!" << endl;

内容来自www.paper51.com

cerr<< "正在获取des密钥,请稍后...................................." << ends; http://www.paper51.com

key =getdeskey (connfd, rsa); //获取DES私钥 paper51.com

cout<< "ok" << endl;

copyright paper51.com

if (key ==0)

http://www.paper51.com

return;

内容来自论文无忧网 www.paper51.com

if ((n =readn (connfd, (void *)buf, MAXLINE)) < 0) //从套接口上读取用户登陆信息

http://www.paper51.com

{ paper51.com

cout<< "Read from socket connfd false! message: " << strerror(errno) << endl;

copyright paper51.com

exit(ERROR);

paper51.com

}

copyright paper51.com

else if (n== 0) copyright paper51.com

{

paper51.com

cout<< "The client close socket." << endl;

paper51.com

return; copyright paper51.com

}

内容来自www.paper51.com

login =(user_login *)buf;

paper51.com

DES_Data*data = new DES_Data ((void *)login->password, 16, key); http://www.paper51.com

bcopy((void *)data->Decrypting (), (void *)login->password, 11); //解密用户登陆口令 paper51.com

cout<< "No." << login->user_id << "请求登录..." << endl; 内容来自www.paper51.com

if (!(check= Attestation (connfd, login))) //认证用户登陆消息

paper51.com

{

copyright paper51.com

cout<< "Wrong user name or wrong password!" << endl;

http://www.paper51.com

cout<< "登录失败!" << endl;

copyright paper51.com

return; 内容来自www.paper51.com

} 内容来自www.paper51.com

else if(check < 0)

http://www.paper51.com

return; copyright paper51.com

cout<< "登录成功!" << endl;

http://www.paper51.com

InsertOnline(connfd, login->user_id, key); //插入在线用户表

paper51.com

if(GetFriends (connfd, login->user_id) < 0) //获得好友记录 http://www.paper51.com

return;

paper51.com

if(GetMessages (connfd, login->user_id, key) < 0) //获取离线消息

内容来自论文无忧网 www.paper51.com

return;

内容来自www.paper51.com

ServFreeChat(connfd, login->user_id, key); //服务在线用户,负责转发消息 copyright paper51.com

return; copyright paper51.com

}

内容来自论文无忧网 www.paper51.com

l       发送RSA公钥 内容来自论文无忧网 www.paper51.com

Statussend_rsa_publickey (int sockfd, publickey key) 内容来自www.paper51.com

{ //向客户端发送RSA公钥

copyright paper51.com

charbuf[MAXLINE];

内容来自论文无忧网 www.paper51.com

int n; http://www.paper51.com

bcopy((void *)&key, (void *)buf, sizeof (key)); //将RSA公钥拷贝到发送缓冲区

http://www.paper51.com

if ((n =writen (sockfd, buf, MAXLINE)) < 0) //向套接口写公钥

http://www.paper51.com

{ http://www.paper51.com

cout<< "Send public key to socket false! message: " << strerror(errno) << endl;

copyright paper51.com

return(ERROR);

paper51.com

} http://www.paper51.com

return(OK); http://www.paper51.com

}

内容来自论文无忧网 www.paper51.com

l       获取DES密钥 http://www.paper51.com

unsigned longlong getdeskey (int sockfd, RSA rsa) 内容来自www.paper51.com

{ //从客户端取得经RSA加密后的DES密钥并解密出来 copyright paper51.com

int n;

http://www.paper51.com

charbuf[MAXLINE];

内容来自www.paper51.com

unsignedlong long deskey; 内容来自www.paper51.com

BigNum c,m;

内容来自www.paper51.com

if ((n =readn (sockfd, buf, MAXLINE)) < 0) //从套接口读取RSA加密后的DES密钥 内容来自论文无忧网 www.paper51.com

{

内容来自论文无忧网 www.paper51.com

cout<< "Read from socket sockfd for get key false! message: "<< strerror (errno) << endl; paper51.com

return(0); copyright paper51.com

}

copyright paper51.com

else if (n== 0) copyright paper51.com

{

内容来自论文无忧网 www.paper51.com

cout<< "The client close socket." << endl; paper51.com

return(0);

内容来自论文无忧网 www.paper51.com

}

copyright paper51.com

bcopy((void *)buf, (void *)&c, sizeof (c));

内容来自www.paper51.com

m =rsa.decrypting (c);  //解密得DES密钥 内容来自www.paper51.com

str_to_longlong(m.getnum (), deskey); //将字符串型的DES密钥转换为longlong型

paper51.com

return(deskey);

内容来自www.paper51.com

} 内容来自论文无忧网 www.paper51.com

5.5   客户端核心代码

http://www.paper51.com

内容来自论文无忧网 www.paper51.com

图7 两客户端正常通信 内容来自www.paper51.com

图7为经过DES正常加密解密的两客户端间的正常通信过程。 http://www.paper51.com

内容来自www.paper51.com

图8 无DES解密过程客户端与正常客户端通信

内容来自论文无忧网 www.paper51.com

图8左边为DES正常加密解密的客户端,右边为没有解密过程的客户端,故收到的信息为经DES算法加密过后的乱码。 http://www.paper51.com

l       发送消息线程

内容来自论文无忧网 www.paper51.com

void*Send_Message (void *arg) http://www.paper51.com

{ 内容来自www.paper51.com

Messagemessage; paper51.com

SockFriend*pf;

copyright paper51.com

charbuf[MAXLINE], *src;

paper51.com

int i = 0; copyright paper51.com

pf =(SockFriend *) arg; 内容来自论文无忧网 www.paper51.com

while (1) paper51.com

{

内容来自论文无忧网 www.paper51.com

cout<< "Friends Online: "; 内容来自www.paper51.com

PrintFriends(pf->friendonline);

http://www.paper51.com

cout<< "Friends Offline: "; 内容来自论文无忧网 www.paper51.com

PrintFriends(pf->friendoffline); paper51.com

cout<< "Sendto >>>" << endl;

内容来自www.paper51.com

InputString(src); //输入要发送用户得id 内容来自论文无忧网 www.paper51.com

Change_ston(src, message.friend_id);

http://www.paper51.com

cout<< "Message: " << endl; copyright paper51.com

InputString(src); //输入聊天信息 paper51.com

DES_Data*data = new DES_Data ((void *)src, 296, pf->key);

http://www.paper51.com

bcopy((void *)data->Encrypting (), (void *)message.message, sizeof(message.message)); //将消息加密后送入 message字符串中

http://www.paper51.com

cout<< endl;

copyright paper51.com

deletedata;

paper51.com

bcopy((void *)&message, (void *)buf, sizeof (message)); paper51.com

if(writen (pf->sockfd, buf, MAXLINE) < 0) //发送消息 paper51.com

{

copyright paper51.com

cout<< "Write message to pf.socfd false! message: " <

copyright paper51.com

exit(ERROR);

copyright paper51.com

} http://www.paper51.com

} 内容来自论文无忧网 www.paper51.com

} paper51.com

l       接收消息线程 内容来自www.paper51.com

void*Get_Message (void *arg) 内容来自论文无忧网 www.paper51.com

{

copyright paper51.com

Messagemessage; http://www.paper51.com

Friend*fri; 内容来自www.paper51.com

SockFriend*pf;

copyright paper51.com

charbuf[MAXLINE]; 内容来自www.paper51.com

int n;

内容来自论文无忧网 www.paper51.com

DES_Data*data;

copyright paper51.com

pf =(SockFriend *)arg;

内容来自论文无忧网 www.paper51.com

while ((n =readn (pf->sockfd, buf, MAXLINE)) >= 0) //从套接口上读取加密后的信息 内容来自www.paper51.com

{ copyright paper51.com

if(n == 0) 内容来自www.paper51.com

break; http://www.paper51.com

bcopy((void *)buf, (void *)&message, sizeof (message));

copyright paper51.com

data= new DES_Data ((void *)message.message, 296, pf->key); 内容来自www.paper51.com

bcopy((void *)data->Decrypting (), (void *)message.message, sizeof(message.message)); //将消息解密后送到message字符串中 内容来自论文无忧网 www.paper51.com

fri= FindFriend (pf->friendonline, message.friend_id); paper51.com

if(fri)

paper51.com

cout<< "\n" << fri->friendname << "("<< fri->friend_id << ") say: "; //打印出发消息得好友名和id paper51.com

else

http://www.paper51.com

{ http://www.paper51.com

fri= FindFriend (pf->friendoffline, message.friend_id);

http://www.paper51.com

if(fri) paper51.com

cout<< "\n" << fri->friendname << "("<< fri->friend_id << ") said: "; http://www.paper51.com

else

paper51.com

cout<< "\nSkyGod (" << message.friend_id << ")say: ";

http://www.paper51.com

} copyright paper51.com

cout<< message.message << "\nSend to >>>" <

copyright paper51.com

} copyright paper51.com

cout<< "The server must meet some problem!" << endl; copyright paper51.com

close(pf->sockfd);

内容来自论文无忧网 www.paper51.com

exit(ERROR);

http://www.paper51.com

} paper51.com

linux环境聊天程序毕业设计,linux环境下的密文聊天系统(论文+程序)相关推荐

  1. linux下qt多个程序打包,解决Ubuntu下使用linuxdeployqt打包Qt程序问题

    写了点Qt界面程序,然而发现很难移植到其他没有安装Qt环境的电脑上运行.查资料了解到,在windows上有windowsdeployqt程序,linux上有linuxdeployqt可以帮助我们快速打 ...

  2. 1024程序员节再次引爆星城!千万程序员线上线下互动,共迎新程序员时代

    10月23-24日,"2021长沙 · 中国1024程序员节"在长沙盛大开幕.大会以"开源开放 算据赋能--开启数字经济新时代"为主题,囊括岳麓尖峰对话.202 ...

  3. 基于微信旅游景区购票小程序毕业设计毕设作品(8)毕设论文模板

    整个项目包含了:开题报告 + 开题报告PPT + 任务书 + 中期报告 + 论文模板 + 答辩PPT等 主要安介绍了系统在开发过程中所应用到的一些关键的技术,主要包括了前端小程序开发的MINA框架:后 ...

  4. linux在线聊天报告,EChat: Linux下基于命令行的在线聊天系统

    概要设计0.0.1 2019/10/13 EasyChat client.c 功能描述 1.1 echat 建立与服务器的连接 登录 1.2 echat -h 说明用法 1.3 echat regis ...

  5. linux QT 程序自启动,Qt Windows下开机自动启动自己的程序

    JSP复习整理(四)Cookie 一.useCookie.html Go项目结构和模块导入 Go项目结构和模块导入 golang项目结构与其他语言类似,但是仍然有一些需要注意的地方. 项目结构 环境配 ...

  6. 软件工程毕业设计课题(61)微信小程序毕业设计JAVA旅游景区点评攻略小程序系统设计与实现

    项目背景和意义 目的:本课题主要目标是设计并能够实现一个基于微信景区景点旅游攻略小程序系统,前台用户使用小程序,小程序使用微信开发者工具开发:后台管理使用基PP+MySql的B/S架构,开发工具使用p ...

  7. 小程序毕业设计 基于java后台微信在线视频点播小程序毕业设计参考

    小程序 后台

  8. 原创 基于微信小程序毕业设计题目选题课题 图书馆图书借阅小程序的设计与实现(1)首页

    首页主要显示:轮播图.菜单.最新资讯.最新上架的图书 效果图 wxml代码 <!--轮播:远程数据(图片地址+连接地址)[对象数组,数组中的每个元素包含图片地址+链接地址]--> < ...

  9. 小程序毕业设计 基于微信4S店汽车维修保养小程序毕业设计开题报告功能参考

    小程序功能 后台功能

最新文章

  1. 被面试官问懵B了,十亿级数据ES搜索怎么优化?
  2. TYVJ1415 差分约束
  3. 【Linux 内核】调度器 ⑤ ( put_prev_task、set_next_task 函数 | select_task_rq 函数 | migrate_task_rq 函数 )
  4. C语言过河问题主函数,c,c++_C语言踩石头过河问题,用DFS搜索递归了17万次但是没报错,请问是什么原因?,c,c++,算法 - phpStudy...
  5. JAV虚拟机下载 JDK1.6下载大全
  6. Android App层通过JNI从驱动获取Input Event
  7. jquery ajax教程例子,jquery ajax教程例子
  8. python模拟按键directx,Python3在DirectX游戏中移动鼠标
  9. php读取excel文件_PHP读取Excel类文件
  10. Ubuntu22.04运行网易云音乐错误
  11. appkey、appSecret自动生成
  12. php 获取当前域名
  13. 【ELM分类】基于matlab鲸鱼算法优化核极限学习机数据分类【含Matlab源码 2012期】
  14. 极致CMS v1.7版本-一款完全开源,免授权商用,功能强大的PHP建站系统
  15. 【分享】asp.net WebChart 折线图、饼形图、柱状图
  16. 小白入门Git详细教程
  17. 徐小明:探寻股市下跌的真正原因
  18. 工信部的小伙伴,还没过上年
  19. 2020 C++ priority_queue 最大堆与最小堆介绍
  20. 分享一个Spring MVC 根据图片URL,下载图片的方法

热门文章

  1. java获取用户ip_Java获取用户访问IP及地理位置的方法详解
  2. java_多线程——线程池、submit和execute区别
  3. 测试驱动开发系列之五--测试的模式与反模式
  4. 09校内网、人人网、千橡公司笔试题
  5. 攻防世界 unfinish
  6. swift 斗鱼项目学习
  7. 出中的意思是什么_诗词中出律是什么意思
  8. Craps赌博游戏、百钱白鸡、七星彩选号、抓小偷、21根火柴、10000以内完美数
  9. ConfluxScan 验证合约详解
  10. sql distinct详解