1、常熟理工学院信息安全与技术大作业实验名称 实验 简单的数字签名 :实验目的学会简单的数字签名,和网络通信.实验设备PC 机实验日期 2014 年 6 月 5 日一、知识准备通过查阅资料或上网搜索资料,对 Socket 通信有基本的了解,知道设计一个基本的网络服务器的步骤,以及相关的函数.二、实验内容 (原理、方法)1. 实现网络通信;2.采用哈希函数对传输的内容进行数字签名;3.结果验证:数字签名正确则显示数据包内容,否则显示出错信息。三、实验过程服务器端:#include #include / for printf#include #define DEFAULT_BUFFER 100void
2、 Hash(char a)int len,i;char b;len=strlen(a);for(i=0;i#include / for printf#include #define DEFAULT_BUFFER 100char szMessage1000;void Hash(char a)int i,len1;char b;len1=strlen(a);for(i=0;ilen1/2;i+)b=ai;ai=alen1-i-1;alen1-i-1=b;for(i=0;ilen1;i+)ai=(int)ai+len1;int main()WORD sockVersion = MAKEWORD(2,
3、2);WSADATA data;SOCKET sclient;struct sockaddr_in serAddr;if(WSAStartup(sockVersion,if(sclient = INVALID_SOCKET)printf(“inalid socket!“);return 0;serAddr.sin_family=AF_INET;serAddr.sin_port=htons(5050);serAddr.sin_addr.S_un.S_addr = inet_addr(“127.0.0.1“);sclient = socket(AF_INET, SOCK_STREAM,0);if(
4、connect(sclient, (struct sockaddr *)closesocket(sclient);return 0;printf(“Enter a string to send to server:n“);gets(szMessage);send(sclient,szMessage,DEFAULT_BUFFER,0);int len;len=strlen(szMessage);Hash(szMessage);/printf(“加密后:“);puts(szMessage);send(sclient,szMessage,DEFAULT_BUFFER,0);/closesocket(
5、sclient);WSACleanup();return 0;设计思路:在客户端上通过屏幕输入明文,然后加密,加密算法为先将明文倒序,然后将明文的 asc 码加上明文的长度。将密文发送给服务器,服务器解密,解密算法为先将密文倒序,然后密文的 asc 码减去它的长度,在服务器上显示明文。三、实验结果(遇到的问题及解决方法)遇到的问题:在 send 函数,和 recv 函数中出现错误,在客户端端中通过屏幕输入字符串加密后传到服务器上出错。解决的办法:重新查阅资料,找到 send 和 recv 函数,并改正。四、心得体会 (实验收获)这次实验,我第一次接触 Socket,通过编写这些代码我学会了建立和使用 socket,实现网络通信,学会了用 Hash 函数来实现简单的数字签名,对建立网络通信的步骤有了进一步的理解。知识准备 实验过程 问题思考 综合评价