网络安全课程设计.docx
《网络安全课程设计.docx》由会员分享,可在线阅读,更多相关《网络安全课程设计.docx(16页珍藏版)》请在冰豆网上搜索。
网络安全课程设计
网络安全课程设计
实验名称:
网络安全管理设计
班级:
网络****
学号:
***
姓名:
****
指导老师:
****
2012年9月26日
《网络安全》实验指导书
对称加密算法
一、实验目的
1、熟悉和掌握对称加密算法的原理及其一般过程;
2、掌握对称加密算法的基本方法:
替代(substitute)与置换(transposition);
3、掌握使用一定的编码开发工具(对具体的开发平台和工具不作要求)。
二、实验内容
1、替代加密法
1)编程实现课本习题2.1的线形替代加密方法的破解(提示:
可使用穷举法);
(已知替代变换函数f(a)=akmod26,且9kmod26=15,试计算k)
2)破解后,实现该方法的加密运算(输入明文,输出密文)和解密运算(输入密文,输出明文)(解密运算提示:
设密钥为k,密文为c,明文为m,则有m*kmod26=c,因为m<26且唯一,同样可使用穷举法搜索出m);
3)加密字符串“substitute”,输出密文;
4)(可选)推导解密密码本,即明文与密文字母的一一对应关系。
2、置换加密法
1)给定置换表“86427531”,编程实现基于该表的加密运算;
2)加密字符串“transposition”,输出密文(提示:
如字符串长度不是8的倍数,则需在字符串结尾后填充空格,使得其总长度为8的倍数);
3)参照课本表2-1和表2-8的关系,推导逆置换表,并编程实现相应的解密运算。
三、程序清单
1、初始并定义程序所用的主要的参数
boolfound=false;//标记k是否被求出
boolff=false;//标记密码本是否被求出
staticintCodeBook[26];//替代加密法的明文本
staticcharCodeBookStr[26];//替代解密法的密码本
inttrsp[8]={7,5,3,1,6,4,2,0};//置换加密所用的数组
intrev_trsp[8]={7,3,6,2,5,1,4,0};//置换解密所用的数组
staticcharc[26];//由明文转的密文
stringcc;//输入的密文
intk;
stringaa;//输入的明文
2、替代加/解密算法
1)计算k
void_mod_k()//求出K
{
inti=1;
while(!
found)
{
if(9*i%26==15)
{
found=true;
k=i;
}
i++;
}
cout<<"k="<}
2)计算解密密码本
void_find_ma()//求出解密密码本
{
if(!
found)
{
cout<cout<";
cout<<"请先执行上层的步骤1求出k"<return;
}
ff=true;
inti=1;
boolf=false;
while(!
f)
{
if(15*i%26==9)
f=true;
i++;
}
intkd=i-1;//Des:
x=y*kdmod26
cout<cout<<"1/k="<intt;
cout<<"解密密码本为:
";
charc;
for(i=0;i<26;i++)
{
t=i*kd%26;
CodeBook[i]=t;
c=i+97;
cout<}
cout<for(i=0;i<26;i++)
{
t=i*kd%26;
CodeBook[i]=t;
c=t+97;
cout<CodeBookStr[i]=c;
}
cout<}
3)替代加密算法
void_subst(stringaa,intlen)//替代加密
{
inti;
for(i=0;i{
if(aa.at(i)>='1'||aa.at(i)<='9')
{
cout<";
cout<<"此加密法只能对字母进行加密!
"<return;
}
}
if(!
found)
{
cout<cout<";
cout<<"请先执行上层的步骤1求出k"<return;
}
cout<";
for(i=0;i{
c[i]=aa.at(i);
intm=c[i]-97;
m=m*k%26;//Encrypt
m+=97;
c[i]=m;
cout<}
cout<}
4)替代穷举解密算法
void_oneto_one(intlen)//穷举法解码
{
if(!
found)
{
cout<cout<";
cout<<"请先执行上层的步骤1求出k"<return;
}
inti;
for(i=0;i{
if(cc.at(i)>='1'||cc.at(i)<='9')
{
cout<";
cout<<"此解密法只能对字母进行解密!
"<return;
}
}
cout<";
for(i=0;i{
c[i]=cc.at(i);
intm=c[i]-97;
boolf=false;
inta=0;
while(!
f)
{
if(m==a*k%26)
f=true;
a++;
}
a+=96;//97-1
c[i]=a;
cout<}
cout<}
5)替代密码本解密算法
void_ben(intlen)//密码本解密
{
inti;
for(i=0;i{
if(cc.at(i)>='1'||cc.at(i)<='9')
{
cout<";
cout<<"此解密法只能对字母进行解密!
"<return;
}
}
if(!
found)
{
cout<cout<";
cout<<"请先执行上层的步骤1求出k"<return;
}
if(!
ff)
{
cout<cout<";
cout<<"请先执行上层的步骤2求出密码本"<return;
}
cout<";
for(i=0;i{
intidx=cc.at(i)-97;
cout<}
cout<}
3、置换加/解密算法
1)置换加密算法
void_trans_a(stringaa,intlen)//置换加密
{
intl=8-len%8;
strings=aa;
while(l)
{
s+="";l--;
}
l=s.length()/8;
cout<";
strings1,s2;
intj,k,n;
for(j=0;j{
s1=s.substr(j*8,8);
s2="";
for(k=0;k<8;k++)
{
n=trsp[k];
s2+=s1.substr(n,1);
}
cout<}
}
2)置换解密算法
void_trans_j(intlen)//置换解密
{
if(len%8)
{
cout<";
cout<<"请输入长度为8的倍数的字符串解密"<return;
}
cout<";
strings=cc;
strings1,s2;
intj,k,n,l=len/8;
for(j=0;j{
s1=s.substr(j*8,8);
s2="";
for(k=0;k<8;k++)
{
n=rev_trsp[k];
s2+=s1.substr(n,1);
}
cout<}
}
4、程序处理流程
四、运行结果
1、计算k
2、计算替代解密密码本
3、加密
4、解密
《网络安全》实验指导书
基于iptables的Linux防火墙
一、实验目的
1、熟悉和掌握TCP/IP协议的基础概念和方法;
2、掌握防火墙的概念、功能分类及实现方法;
3、掌握Linux系统防火墙和基于iptables的防火墙的配置方法。
二、实验内容
1、准备工作
●同一局域网内的2台PC
a)A的操作系统为Linux,在A安装网络服务及配置iptables;
b)B对A的配置进行验证,主要使用基于icmp协议的ping命令和基于tcp协议的ftp相关命令或软件,假定其ip为10.10.96.123。
●在A:
1)安装vsftpd
2)增加1个一般用户,如abc
3)添加新增用户为ftp用户
gedit/etc/vsftpd/vsftpd.conf,加入
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd/ulis
gedit/etc/vsftpd/ulis,加入
abc
4)验证系统已打开iptables(默认)
systemsetting->serversetting->serviceconfig->iptables
●熟悉使用netstat命令分析当前的网络连接状态
2、配置Linux的系统防火墙
1)A:
start->systemsetting->securitylevel->enableftp(only),允许系统建立ftp连接
2)B:
ftp测试之(使用userpswlslcdget等命令)
3)A:
start->systemsetting->securitylevel->disableftp,禁止系统建立ftp连接
4)B测试之
3、使用iptables命令配置防火墙,熟悉几类基本过滤原则的配置方法(有关ftp的操作,必须确认系统允许建立ftp连接,因其优先级高于iptables的过滤)
0>备份/etc/sysconfig/iptables
1>阻塞某IP的连接
A:
阻塞
#iptables-AINPUT-s192.168.3.42-jDROP
B:
ping,测试之
A:
取消阻塞
#iptables-DINPUT-s192.168.3.42-jDROP
B:
ping,测试之
(以下只列出实验过程的关键步骤,其他命令与测试请在实验过程中补足)
2>阻塞某网段的连接
A:
#iptables-AINPUT-s192.168.3.1/24-jDROP
A:
#iptables-DINPUT-s192.168.3.1/24-jDROP
3>阻塞某协议的连接,如icmp
A:
#iptables-AINPUT-picmp-jDROP
B:
ping,测试之
A:
#iptables-DINPUT-picmp-jDROP
4>阻塞某端口的连接,如ftpcmd使用的21端口
A:
#iptables-AINPUT-ptcp--dport21-jDROP
B:
ftp,测试之
A:
#iptables-DINPUT-ptcp--dport21-jDROP
5>阻塞连接请求(选做,须较熟悉ftp模式;因系统已允许ftp的命令连接,iptables只能控制数据连接,即非21端口的建立)
5.1阻塞本机到外部的连接
A:
#iptables-AOUTPUT-ptcp--syn-jDROP
B:
ftp,使用port模式get文件(port模式:
服务器发起数据连接)
A:
#iptables-DOUTPUT-ptcp--syn-jDROP
5.2阻塞本机到外部的连接-2
A:
#iptables-AOUTPUT-ptcp--syn-jDROP
A:
尝试使用其他方法主动连接B的服务
A:
#iptables-DOUTPUT-ptcp--syn-jDROP
5.3阻塞外部主机到本机的连接
A:
#iptables-AINPUT-ptcp--syn-jDROP
B:
ftp,使用pasv模式get文件(pasv模式:
客户端发起数据连接)
A:
#iptables-DINPUT-ptcp--syn-jDROP
6>选择以上若干实验步骤,使用iptables动作REJECT代替DROP,比较它们的区别,思考使用DROP的优点。
7>(选学)从‘iptables参考手册’选学-mstate、-mlimit、-mmac、-mowner等配置选项。
8>结束iptables命令实验,恢复/etc/sysconfig/iptables