学习笔记之网络软件设计(三)

任务三 认证与数据传输


一、要求

模拟一种CHAP的认证方法
用户与服务器之间都持有密码:12345
连接上服务器后,服务器将向客户机发送质询数据,该质询数据由N个整数构成,N是随机的,整数长度可能是两个字节,也可能是4个字节。
客户机将这N个整数相加,把总和与密码相异或,得到质询结果,传回给服务器

服务器收到质询结果后,验证这个结果是否正确,并给与响应

二、与任务相关的实验

06-网络字节序
07-服务与协议
11-多路复用
14-状态与有限状态机设计

三、完成过程

定义结构体:
struct Message
{
	int num_2bit;
	int num_4bit;
	int result;
	char buf[MAXSIZE];
};

随机生成N个整数,并计算求和:
struct Message message;

//随机产生2字节和4字节的整数
srand(time(NULL));
int n = rand()*255/RAND_MAX;
message.num_2bit = rand()*n/RAND_MAX;
message.num_4bit = n-message.num_2bit;

//将整数存入char数组
for(i=0; i>8;
}

for(i=0; i>8;
	message.buf[message.num_2bit*2+i*4+2] = (int)temp>>16;
	message.buf[message.num_2bit*2+i*4+3] = (int)temp>>24;
}

服务器与客户端对所有整数进行求和:
int sum;

for(i=0; i

再让结果与相应的密码异或,得到用来验证身份的结果:
message.result = sum^12345;

sock通信中还可以直接传送结构体:
int sndlen = 12 + message.num_2bit*2 + message.num_4bit*4 + 1;

send(ns, (char*)&message, sndlen, 0);

四、小结

了解了下简单认证的过程。。





你可能感兴趣的:(C/C++,socket)