linux环境聊天程序毕业设计,linux环境下的密文聊天系统(论文+程序)
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环境下的密文聊天系统(论文+程序)相关推荐
- linux下qt多个程序打包,解决Ubuntu下使用linuxdeployqt打包Qt程序问题
写了点Qt界面程序,然而发现很难移植到其他没有安装Qt环境的电脑上运行.查资料了解到,在windows上有windowsdeployqt程序,linux上有linuxdeployqt可以帮助我们快速打 ...
- 1024程序员节再次引爆星城!千万程序员线上线下互动,共迎新程序员时代
10月23-24日,"2021长沙 · 中国1024程序员节"在长沙盛大开幕.大会以"开源开放 算据赋能--开启数字经济新时代"为主题,囊括岳麓尖峰对话.202 ...
- 基于微信旅游景区购票小程序毕业设计毕设作品(8)毕设论文模板
整个项目包含了:开题报告 + 开题报告PPT + 任务书 + 中期报告 + 论文模板 + 答辩PPT等 主要安介绍了系统在开发过程中所应用到的一些关键的技术,主要包括了前端小程序开发的MINA框架:后 ...
- linux在线聊天报告,EChat: Linux下基于命令行的在线聊天系统
概要设计0.0.1 2019/10/13 EasyChat client.c 功能描述 1.1 echat 建立与服务器的连接 登录 1.2 echat -h 说明用法 1.3 echat regis ...
- linux QT 程序自启动,Qt Windows下开机自动启动自己的程序
JSP复习整理(四)Cookie 一.useCookie.html Go项目结构和模块导入 Go项目结构和模块导入 golang项目结构与其他语言类似,但是仍然有一些需要注意的地方. 项目结构 环境配 ...
- 软件工程毕业设计课题(61)微信小程序毕业设计JAVA旅游景区点评攻略小程序系统设计与实现
项目背景和意义 目的:本课题主要目标是设计并能够实现一个基于微信景区景点旅游攻略小程序系统,前台用户使用小程序,小程序使用微信开发者工具开发:后台管理使用基PP+MySql的B/S架构,开发工具使用p ...
- 小程序毕业设计 基于java后台微信在线视频点播小程序毕业设计参考
小程序 后台
- 原创 基于微信小程序毕业设计题目选题课题 图书馆图书借阅小程序的设计与实现(1)首页
首页主要显示:轮播图.菜单.最新资讯.最新上架的图书 效果图 wxml代码 <!--轮播:远程数据(图片地址+连接地址)[对象数组,数组中的每个元素包含图片地址+链接地址]--> < ...
- 小程序毕业设计 基于微信4S店汽车维修保养小程序毕业设计开题报告功能参考
小程序功能 后台功能
最新文章
- 被面试官问懵B了,十亿级数据ES搜索怎么优化?
- TYVJ1415 差分约束
- 【Linux 内核】调度器 ⑤ ( put_prev_task、set_next_task 函数 | select_task_rq 函数 | migrate_task_rq 函数 )
- C语言过河问题主函数,c,c++_C语言踩石头过河问题,用DFS搜索递归了17万次但是没报错,请问是什么原因?,c,c++,算法 - phpStudy...
- JAV虚拟机下载 JDK1.6下载大全
- Android App层通过JNI从驱动获取Input Event
- jquery ajax教程例子,jquery ajax教程例子
- python模拟按键directx,Python3在DirectX游戏中移动鼠标
- php读取excel文件_PHP读取Excel类文件
- Ubuntu22.04运行网易云音乐错误
- appkey、appSecret自动生成
- php 获取当前域名
- 【ELM分类】基于matlab鲸鱼算法优化核极限学习机数据分类【含Matlab源码 2012期】
- 极致CMS v1.7版本-一款完全开源,免授权商用,功能强大的PHP建站系统
- 【分享】asp.net WebChart 折线图、饼形图、柱状图
- 小白入门Git详细教程
- 徐小明:探寻股市下跌的真正原因
- 工信部的小伙伴,还没过上年
- 2020 C++ priority_queue 最大堆与最小堆介绍
- 分享一个Spring MVC 根据图片URL,下载图片的方法