网络安全防御技术实验报告.doc_第1页
网络安全防御技术实验报告.doc_第2页
网络安全防御技术实验报告.doc_第3页
网络安全防御技术实验报告.doc_第4页
网络安全防御技术实验报告.doc_第5页
免费预览已结束,剩余15页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

网络安全防御技术实验报告姓 名:秦映林学 号:0903070103班 级:信息0701班指导老师:杨振宇实验地点:综合实验楼实验时间:2010年11月实验一:只使用XOR的加密及其分析实验要求:编写程序分别实现如下功能:a)用户输入明文PlainText和密钥Key(都可以从文件读取),用分组异或XOR生成相应密文,并输出到文件( “学号#1.dat“ )。b)获得(交换)其他同学的密文文件(“学号#1.dat“ ),在明文、密钥(甚至”密钥长度”)未知的情况下,用穷举法获得明文和密钥。c)改进加密算法以提高安全性。(自己发挥) 实验过程:设计上要注意两点的内容,第一是对不同长度的密钥处理,以得到最后相同长度的最终密钥,第二是对明文的分组处理,并且在特定情况下要进行补白.鉴于本次实验的目的是了解分组异或的原理及简单实现,因此这里避开特殊的繁琐之处,对密钥的要求不高,只需要8个比特位的密钥.如此设计是为了不管用户输入多长的密钥,都能很方便得得到最后的八位密钥.另外,由于密钥是8位,因此降低了分组难度.相当于明文中每8个比特位为一组,这样只需将明文与密钥进行简单的异或.对用户输入的常见字符进行处理,得到密钥,再由密钥对明文加密,整体逻辑简单,编程容易.这里用C语言来实现.#include#include#includetypedef unsigned char UC;UC getKey( const char *k ) /得到八位密钥 UC ans = 0; int i = 0; while( ki ) ans = (UC)ki+; return ans; char *work_code( const char *t, const char *k ) int lent = strlen(t), lenk = strlen(k), i = 0; char *v = (char*)malloc(sizeof(char)*lent); UC key = getKey(k); while( ti ) vi = keyti+; vi = 0; return v;void work_encode( const char *v, const char *k ) int i = 0; UC key = getKey(k); while( vi ) printf(%c, keyvi+); int main ( void ) freopen(in.txt,r,stdin); freopen(out.txt,w,stdout); char t1000,k1000; while( scanf(%s%s,t,k) != EOF ) char *v = work_code( t,k ); printf(%sn,v); /work_encode(v,k); return 0;实验结果:加密前:加密后:实验总结:从上面的数据可以看出解密后的两份数据如果以ASCII解析的话,看上去好像是差不多的,两份数据之间的差异是大小写字母倒转过来,从标准的ASCII表中可以得知,大写英文字母和小写英文字母之间相差32字节,即上面两份解密后的数据中每个字节都相差32字节,如果从ASCII解析角度考虑的话,的确难以分辨哪份数据才是正确,因为不知道解密后的文件数据中除了包含用于ASCII编码显示的数据外还有没有包括别的有用的二进制解析的数据。要知道解密后的数据中有没有包含二进制解析的数据,那么不妨用Windows的记事本打开这两份解密后的文件,因为Windows的记事本是以ASCII解析数据的,浏览ASCII解析的文件比较直观,虽然Winhex中也可以直接以ASCII解析观察数据,但不如Windows的记事本方便。实验二:用 Feistel结构构造加密算法实验要求:应用Feistel结构,构造 加解密算法。并编写2个程序分别实现对文件进行加密和解密,加密后的文件命名为“学号#2.dat“ 。要求采用分组链接模式(CBC)。实验过程:Feistel结构:加密: Li = Ri-1; Ri = Li-1F(Ri-1,Ki)解密: Ri-1 = Li Li-1 = RiF(Ri-1,Ki) = RiF(Li,Ki)Feistel加密过程:输入: 长为2w比特的明文分组 密钥k输出:长为2w比特的密文分组 核心代码:while(!feof(fp)/从文件中读取位分组if(fgets(TempFileContent,64,fp) = NULL)printf(read file errorn);return 0;for(int i = 0;i 64;i+)/将读出的位明文存入temp数组中进行操作tempi = TempFileContenti;for(int i = 0;i 64;i+)/初始置换TempFileContenti = tempIPi;/16轮迭代过程for(int I = 0;I 16;I+)for(int j = 0; j 32; j+)Lj = TempFileContentj;Rj = TempFileContent32 + j;/将R保存,最后要将R赋给Lfor(int i = 0;i 32;i+)TEMPRi = Ri;/对R分组操作,先扩展/置换,使之成为位,存放在E中for(int i = 0; i 8; i+)for(int j = 0; j 6;j+)if(j = 0 | j = 5)Eij = Rrand()/1000 + 2;/这里应该不妥elsefor(int k = 0; k 32; k+)Eij = Rk;for(int i = 0; i 28; i+)Ci = Keyi;Di = Key56 - i;/这里图了简单.if(I = 0 | I = 1 | I = 8 | I = 15)int temp;/完成移位操作temp = C0;for(int i = 0; i 28; i+)Ci = Ci+1;C27 = temp;else/这里肯定有更好的办法,因为操作的不是位,所以复杂int temp = D0;int temp2 = D1;for(int i = 0;i 28; i+)Di = Di + 2;D26 = temp;D27 = temp2;/置换选择,生成位子密钥for(int i = 0; i 48; i+)kii = Ci;ki47 - i = D27 - i;/子密钥和R异或运算int k = 0;for(int i = 0; i 8; i+)for(int j = 0; j 6; j+)tempk = Eij;/这里确信不会出错k+;for(int i = 0; i 64; i+)temp3i = tempi;for(int i = 0; i 64;i+)printf(%c,temp3i);int a8 = 0;/存放十进制结果int j = 0,i = 0,m = 0;k = 0;/while(m 8 & k 8 & i 8)for(;k 8 & m 8 & i 8;i+,k+,m+)ak = (int)Si(int)(temp3j * 2) + (int)temp3j + 5(int)(temp3j+1 * 8) + (int)(temp3j+2 * 4) + (int)(temp3j+3 * 2) + (int)tempj+4;/溢出,720,严重越界j += 6;/6位输入a0 = 10;a1 = 25;/将a中的值转换成位二进制存入R中char b4;/临时存放位进制数m = 0;for(i = 0; i 0)for(int k = 0;k j;k+)bk = 0;/将b送入R中Rm = b0;Rm+1 = b1;Rm+2 = b2;Rm+3 = b3;m += 4;printf(hellon);/最后对R进行P置换char temp432;for(int i = 0;i 32;i+)temp4i = Ri;for(int i = 0;i 32;i+)Ri = temp4Pi;/将R和L异或生成下一个Rfor(int i = 0;i 32;i+)Ri = Li;/将以前的R赋给L生成下一Lfor(int i = 0;i 32;i+)Li = TEMPRi;/for主循环结束/逆初始转换strcat_s(result,L);strcat_s(result,R);strcpy_s(temp,result);for(int i = 0;i OpenFile failed,maybe CreateFile failed.n);exit(1);elseprintf(Encryption file opened.Copying data.n);if(fputs(result,fpresult) != NULL)printf(Copy data success!n);elseprintf(Copy data failedn);fclose(fpresult);/while主循环结束实验结果:实验总结:缺陷/不足/改进缺陷:最大的缺陷是只能在命令行下面加密,没有采用图形界面不足:只尝试过加密txt文件,并将结果写入了txt文件中,其他文件有不同程度的不足,因为txt文件比较直观,可以看到结果,但是还有一个缺陷是结果中有乱码,可能是对加密的理解不是很深入。安全性/效率首先,算法实现上有问题,对于小文件加密效率比较高,但是DES算法的密钥规定为56位,这在目前来说已经不安全了,但是在某些方面用的比较广泛.实验四:用OpenSSL搭建CA实验要求:a) 搜索并下载OpenSSL的最新版本;b) 通过网络查找帮助和说明文档,了解OpenSSL提供什么样的功能;c) 使用OpenSSL搭建认证中心CA;d) 使用CA颁发证书Certificate。实验过程:使用OpenSSL搭建认证中心CA,我用的是openssl0.9.6。下面是应用它的全过程:证书文件生成:一.服务器端1.生成服务器端的私钥(key文件); openssl genrsa -des3 -out server.key 1024运行时会提示输入密码,此密码用于加密key文件(参数des3是加密算法,也可以选用其他安全的算法),以后每当需读取此文 件(通过openssl提供的命令或API)都需输入口令.如果不要口令,则可用以下命令去除口令: openssl rsa -in server.key -out server.key2.生成服务器端证书签名请求文件(csr文件);openssl req -new -key server.key -out server.csr 生成Certificate Signing Request(CSR),生成的csr文件交给CA签名后形成服务端自己的证书.屏幕上将有提示,依照其 提示一步一步输入要求的个人信息即可(如:Country,province,city,company等).二.客户端 1.对客户端也作同样的命令生成key及csr文件; openssl genrsa -des3 -out client.key 1024 openssl req -new -key client.key -out client.csr三.生成CA证书文件server.csr与client.csr文件必须有CA的签名才可形成证书. 1.首先生成CA的key文件: openssl genrsa -des3 -out ca.key 1024 2.生成CA自签名证书: openssl req -new -x509 -key ca.key -out ca.crt 可以加证书过期时间选项 -days 365.四.利用CA证书进行签名用生成的CA证书为server.csr,client.csr文件签名,利用openssl中附带的CA.pl文件(在安装目录中openssl/apps目录下), 1.ca.pl -newca, 在提示输入已有的证书文件时,输入上面已生成的ca.crt证书文件; 2.生成服务端证书文件 Openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -config f 3.生成客户端证书文件 Openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key -config f必须保证f在当前目录下,这个文件可以在apps目录中找到.操作完毕,server.key,server.crt;client.key,cli

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论