网络安全防御技术实验报告.docx
- 文档编号:24647526
- 上传时间:2023-05-29
- 格式:DOCX
- 页数:18
- 大小:346.45KB
网络安全防御技术实验报告.docx
《网络安全防御技术实验报告.docx》由会员分享,可在线阅读,更多相关《网络安全防御技术实验报告.docx(18页珍藏版)》请在冰豆网上搜索。
网络安全防御技术实验报告
网络安全防御技术
实验报告
姓名:
秦映林
学号:
0903070103
班级:
信息0701班
指导老师:
杨振宇
实验地点:
综合实验楼
实验时间:
2010年11月
实验一:
只使用XOR的加密及其分析
实验要求:
编写程序分别实现如下功能:
a)用户输入明文PlainText和密钥Key(都可以从文件读取),用分组异或XOR生成相应密文,并输出到文件(“学号#1.dat“)。
b)获得(交换)其他同学的密文文件(“学号#1.dat“),在明文、密钥(甚至”密钥长度”)未知的情况下,用穷举法获得明文和密钥。
c)改进加密算法以提高安全性。
(自己发挥)
实验过程:
设计上要注意两点的内容,第一是对不同长度的密钥处理,以得到最后相同长度的最终密钥,第二是对明文的分组处理,并且在特定情况下要进行补白.
鉴于本次实验的目的是了解分组异或的原理及简单实现,因此这里避开特殊的繁琐之处,对密钥的要求不高,只需要8个比特位的密钥.如此设计是为了不管用户输入多长的密钥,都能很方便得得到最后的八位密钥.
另外,由于密钥是8位,因此降低了分组难度.相当于明文中每8个比特位为一组,这样只需将明文与密钥进行简单的异或.
对用户输入的常见字符进行处理,得到密钥,再由密钥对明文加密,整体逻辑简单,编程容易.这里用C语言来实现.
#include
#include
#include
typedefunsignedcharUC;
UCgetKey(constchar*k){//得到八位密钥
UCans=0;inti=0;
while(k[i]){ans^=(UC)k[i++];}
returnans;
}
char*work_code(constchar*t,constchar*k){
intlent=strlen(t),lenk=strlen(k),i=0;
char*v=(char*)malloc(sizeof(char)*lent);
UCkey=getKey(k);
while(t[i]){v[i]=key^t[i++];}
v[i]=0;
returnv;
}
voidwork_encode(constchar*v,constchar*k){
inti=0;
UCkey=getKey(k);
while(v[i]){printf("%c",key^v[i++]);}
}
intmain(void){
freopen("in.txt","r",stdin);freopen("out.txt","w",stdout);
chart[1000],k[1000];
while(scanf("%s%s",t,k)!
=EOF){
char*v=work_code(t,k);
printf("%s\n",v);
//work_encode(v,k);
}
return0;
}
实验结果:
加密前:
加密后:
实验总结:
从上面的数据可以看出解密后的两份数据如果以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(">>readfileerror\n");
return0;
}
for(inti=0;i<64;i++)//将读出的位明文存入temp数组中进行操作
{
temp[i]=TempFileContent[i];
}
for(inti=0;i<64;i++)//初始置换
{
TempFileContent[i]=temp[IP[i]];
}
//16轮迭代过程
for(intI=0;I<16;I++)
{
for(intj=0;j<32;j++)
{
L[j]=TempFileContent[j];
R[j]=TempFileContent[32+j];
}
//将R保存,最后要将R赋给L
for(inti=0;i<32;i++)
TEMPR[i]=R[i];
//对R分组操作,先扩展/置换,使之成为位,存放在E[][]中
for(inti=0;i<8;i++)
{
for(intj=0;j<6;j++)
{
if(j==0||j==5)
{
E[i][j]=R[rand()/1000+2];//这里应该不妥
}
else
{
for(intk=0;k<32;k++)
{
E[i][j]=R[k];
}
}
}
}
for(inti=0;i<28;i++)
{
C[i]=Key[i];
D[i]=Key[56-i];//这里图了简单....
}
if(I==0||I==1||I==8||I==15)
{
inttemp;//完成移位操作
temp=C[0];
for(inti=0;i<28;i++)
C[i]=C[i+1];
C[27]=temp;
}
else//这里肯定有更好的办法,因为操作的不是位,所以复杂
{
inttemp=D[0];
inttemp2=D[1];
for(inti=0;i<28;i++)
D[i]=D[i+2];
D[26]=temp;
D[27]=temp2;
}
//置换选择,生成位子密钥
for(inti=0;i<48;i++)
{
ki[i]=C[i];
ki[47-i]=D[27-i];
}
//子密钥和R异或运算
intk=0;
for(inti=0;i<8;i++)
{
for(intj=0;j<6;j++)
{
temp[k]=E[i][j];//这里确信不会出错
k++;
}
}
for(inti=0;i<64;i++)
{
temp3[i]=temp[i];
}
for(inti=0;i<64;i++)
printf("%c",temp3[i]);
inta[8]={0};//存放十进制结果
intj=0,i=0,m=0;
k=0;
//while(m<8&&k<8&&i<8)
for(;k<8&&m<8&&i<8;i++,k++,m++)
{
a[k]=(int)S[i][(int)(temp3[j]*2)+(int)temp3[j+5]][(int)(temp3[j+1]*8)+(int)(temp3[j+2]*4)+(int)(temp3[j+3]*2)+(int)temp[j+4]];//溢出,720,严重越界
j+=6;//6位输入
}
a[0]=10;
a[1]=25;
//将a[]中的值转换成位二进制存入R中
charb[4];//临时存放位进制数
m=0;
for(i=0;i<8;i++)//一共个S盒
{
j=3;
while(a[i]!
=0)
{
if(a[i]%2==0)
b[j]='0';
else
b[j]='1';
a[i]/=2;
j--;
}
if(j>0)
{
for(intk=0;k b[k]='0'; } //将b[]送入R中 R[m]=b[0]; R[m+1]=b[1]; R[m+2]=b[2]; R[m+3]=b[3]; m+=4; } printf("hello\n"); //最后对R[]进行P置换 chartemp4[32]; for(inti=0;i<32;i++) temp4[i]=R[i]; for(inti=0;i<32;i++) R[i]=temp4[P[i]]; //将R和L异或生成下一个R for(inti=0;i<32;i++) R[i]^=L[i]; //将以前的R赋给L生成下一L for(inti=0;i<32;i++) L[i]=TEMPR[i]; }//for主循环结束 //逆初始转换 strcat_s(result,L); strcat_s(result,R); strcpy_s(temp,result); for(inti=0;i<64;i++) result[i]=IP_1[temp[i]]; if((fopen_s(&fpresult,FilePath,"a"))! =0) { printf(">>OpenFilefailed,maybeCreateFilefailed.\n"); exit (1); } else printf(">>Encryptionfileopened.Copyingdata...\n"); if(fputs(result,fpresult)! =NULL) { printf(">>Copydatasuccess! \n"); } else printf(">>Copydatafailed\n"); 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文件); opensslgenrsa-des3-outserver.key1024 运行时会提示输入密码,此密码用于加密key文件(参数des3是加密算法,也可以选用其他安全的算法),以后每当需读取此文 件(通过openssl提供的命令或API)都需输入口令.如果不要口令,则可用以下命令去除口令: opensslrsa-inserver.key-outserver.key 2.生成服务器端证书签名请求文件(csr文件); opensslreq-new-keyserver.key-outserver.csr 生成CertificateSigningRequest(CSR),生成的csr文件交给CA签名后形成服务端自己的证书.屏幕上将有提示,依照其 提示一步一步输入要求的个人信息即可(如: Country,province,city,company等). 二.客户端 1.对客户端也作同样的命令生成key及csr文件; opensslgenrsa-des3-outclient.key1024 opensslreq-new-keyclient.key-outclient.csr 三.生成CA证书文件 server.csr与client.csr文件必须有CA的签名才可形成证书. 1.首先生成CA的key文件: opensslgenrsa-des3-outca.key1024 2.生成CA自签名证书: opensslreq-new-x509-keyca.key-outca.crt 可以加证书过期时间选项"-days365". 四.利用CA证书进行签名 用生成的CA证书为server.csr,client.csr文件签名,利用openssl中附带的CA.pl文件(在安装目录中openssl/apps目录下), 1.ca.pl-newca,在提示输入已有的证书文件时,输入上面已生成的ca.crt证书文件; 2.生成服务端证书文件 Opensslca-inserver.csr-outserver.crt-certca.crt-keyfileca.key-configf 3.生成客户端证书文件 Opensslca-inclient.csr-outclient.crt-certca.crt-keyfileca.key-configf 必须保证f在当前目录下,这个文件可以在apps目录中找到. 操作完毕,server.key,server.crt;client.key,client.crt;ca.key,ca.crt将在项目中被用到. 实验结果: 实验总结: 自己用OPENSSL生成CA证书,可以省钱 ●生成根证书 ●用根证书对签名请求进行签名,得到签名证书 ●将根证书导入到你的JKS文件中,也可以导入到JAVASECURITY目录下的CACERTSkeystore中 ●将签名证书导入到JKS文件中,命令keytool-import中加-trustcacerts命令,此时他会到cacertskeystore或当前keystore中找对应的根证书 ●将此JKS文件配置到TOMCAT中,将根证书导入到客户端的浏览器中
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网络安全 防御 技术 实验 报告