当前位置:文档之家› 信息安全大作业

信息安全大作业

{
printf("解密正确---解密后的内容为:");
puts(szBuff2);
}
else
printf("解密错误");
printf("\n");
}
closesocket(slisten);
WSACleanup();
return 0;
}
客户端:
#include <winsock2.h>
#include <stdio.h> // for printf
if(sClient == INVALID_SOCKET)
{
printf("accept error !");
continue;
}
char szMessage[DEFAULT_BUFFER];
recv(sClient,szMessage,DEFAULT_BUFFER,0);
//puts(szMessage);明文
int len;
len=strlen(szMessage);
Hash(szMessage);
//printf("加密后:");
puts(szMessage);
send(sclient,szMessage,DEFAULT_BUFFER,0);
//closesocket(sclient);
WSACleanup();
void Hash(char a[])
{
int len,i;
char b;
len=strlen(a);
for(i=0;i<len/2;i++)
{
b=a[i];
a[i]=a[len-i-1];
a[len-i-1]=b;
}
for(i=0;i<len;i++)
a[i]=(int)a[i]-len;
}
int main()
常熟理工学院
信息安全与技术大作业
实验名称
实验简单的数字签名:
实验目的
学会简单的数字签名,和网络通信.
实验设备
PC机
实验日期
2014年6月5日
一、知识准备
通过查阅资料或上网搜索资料,对Socket通信有基本的了解,知道设计一个基本的网络服务器的步骤,以及相关的函数.
二、实验内容(原理、方法)
1.实现网络通信;
recv(sClient,szBuff,DEFAULT_BUFFER,0);
//szBuff[ret]='\0';
char szBuff1[DEFAULT_BUFFER];
strcpy(szBuff1,szBuff);
printf("加密后的内容:");
puts(szBuห้องสมุดไป่ตู้f1);//打印客户端加密后的
#include <stdlib.h>
#define DEFAULT_BUFFER 100
char szMessage[1000];
void Hash(char a[])
{
int i,len1;
char b;
len1=strlen(a);
for(i=0;i<len1/2;i++)
{
b=a[i];
a[i]=a[len1-i-1];
Hash(szBuff);
len=strlen(szBuff);
for(i=0;i<len;i++)
szBuff2[i]=szBuff[i];
szBuff2[i]='\0';
//printf("解密后的内容:");
//puts(szBuff2);
if(strcmp(szBuff2,szMessage)==0)
{
char szBuff[DEFAULT_BUFFER];
//int ret,
int i,len;
//char szBuff1[DEFAULT_BUFFER];
char szBuff2[DEFAULT_BUFFER];
WORD sockVersion = MAKEWORD(2,2);
WSADATA wsaData;
SOCKET slisten = socket(AF_INET, SOCK_STREAM,0);//创建监听套接字
if(slisten == INVALID_SOCKET)
{
printf("socket error!");
return 0;
}
//绑定IP和端口
struct sockaddr_in serveradd;
return 0;
}
设计思路:在客户端上通过屏幕输入明文,然后加密,加密算法为—先将明文倒序,然后将明文的asc码加上明文的长度。将密文发送给服务器,服务器解密,解密算法为—先将密文倒序,然后密文的asc码减去它的长度,在服务器上显示明文。
三、实验结果(遇到的问题及解决方法)
遇到的问题:在send函数,和recv函数中出现错误,在客户端端中通过屏幕输入字符串加密后传到服务器上出错。
2.采用哈希函数对传输的内容进行数字签名;
3.结果验证:数字签名正确则显示数据包内容,否则显示出错信息。
三、实验过程
服务器端:
#include <winsock.h>
#include <stdio.h> // for printf
#include <stdlib.h>
#define DEFAULT_BUFFER 100
a[len1-i-1]=b;
}
for(i=0;i<len1;i++)
a[i]=(int)a[i]+len1;
}
int main()
{
WORD sockVersion = MAKEWORD(2,2);
WSADATA data;
SOCKET sclient;
struct sockaddr_in serAddr;
if(WSAStartup(sockVersion,&data)!=0)
{
return 0;
}
if(sclient == INVALID_SOCKET)
{
printf("inalid socket!");
return 0;
}
serAddr.sin_family=AF_INET;
serAddr.sin_port=htons(5050);
serveradd.sin_family=AF_INET;
serveradd.sin_port=htons(5050);
serveradd.sin_addr.S_un.S_addr = INADDR_ANY;
if(bind(slisten, (LPSOCKADDR)&serveradd, sizeof(serveradd)) == SOCKET_ERROR)//监听套接字与本地IP绑定
SOCKET sClient;//客户端
struct sockaddr_in remoteAddr;//客户区地址
int nAddrlen = sizeof(remoteAddr);//客户区长度
if(WSAStartup(sockVersion,&wsaData)!=0)
{
return 0;
}
//创建套接字
serAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
sclient = socket(AF_INET, SOCK_STREAM,0);
if(connect(sclient, (struct sockaddr *)&serAddr, sizeof(serAddr)) == SOCKET_ERROR)
解决的办法:重新查阅资料,找到send和recv函数,并改正。
四、心得体会(实验收获)
这次实验,我第一次接触Socket,通过编写这些代码我学会了建立和使用socket,实现网络通信,学会了用Hash函数来实现简单的数字签名,对建立网络通信的步骤有了进一步的理解。
知识准备
实验过程
问题思考
综合评价
{
printf("connect error !");
closesocket(sclient);
return 0;
}
printf("Enter a string to send to server:\n");
gets(szMessage);
send(sclient,szMessage,DEFAULT_BUFFER,0);
{
printf("bind error !");
}
if(listen(slisten, 5) == SOCKET_ERROR)//服务器监听
{
printf("listen error !");
return 0;
}
while(1)
{
sClient = accept(slisten, (SOCKADDR *)&remoteAddr, &nAddrlen);
相关主题