基于计算机信息安全学的几种算法实验.docx
《基于计算机信息安全学的几种算法实验.docx》由会员分享,可在线阅读,更多相关《基于计算机信息安全学的几种算法实验.docx(16页珍藏版)》请在冰点文库上搜索。
基于计算机信息安全学的几种算法实验
基于计算机信息安全学的几种算法实验
一、天书加密的应用
要求:
自己准备一圆形棒(比如笔筒),直径自定,在其上缠绕一张长条形白色纸条,按天书加密的算法思路,将下面的英文字母依次写上去,然后打开纸条,按纸条从上到下依次写出密文。
actuallyyouareisbutadogasadog,blackeyeswhitecolourandthebeijingandlineagestoyouwillhaveagooddog.
程序设计如下:
#include
usingnamespacestd;
#defineM1000
#defineN100
intmain()
{
chara[M],b[N][5];
inti,j,k,l,m,n,t,f=0;
cout<<"请输入要加密的明文,以#符号为结束标志:
"<for(i=0;i{
cin>>a[i];
if(a[i]=='#')
break;
}
m=i/5;
for(t=0;t{
for(n=0;n<5&&f
{
b[t][n]=a[f];
f++;
}
}
cout<<"经过天书加密后的密为:
"<for(k=0;k<5;k++)
for(l=0;lcout<
cout<return0;
}
二、单表代换密码的应用
设a—z的编号是1-26,采用Kaesar密码方案,明文P=“Pekinguniversity”,计算出密文C。
方法一:
程序设计如下:
#include
usingnamespacestd;
#defineM100//定义最大值
intmain()
{
chara[27]="abcdefghijklmnopqrstuvwxyz",
b[M];
inti,j,k;
cout<<"请输入要加密的明文:
"<for(i=0;i{
cin>>b[i];
if(b[i]=='#')break;//以#为输入的终止条件
else
continue;
}
cout<cout<<"经过kaesar加密后到密文为:
"<for(k=0;k
{
for(j=0;j<26;j++)
{
if(b[k]=='#')
break;
elseif(b[k]==a[j])
{
cout<}
}
}
cout<return0;
}
方法二:
程序设计如下:
#include
usingnamespacestd;
intmain()
{charc;
while((c=getchar())!
='\0')
{if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))
{c=c+3;
if((c>'Z'&&c<'Z'+3)||c>'z')c=c-26;
}
cout<}
cout<return0;
}
三、多字母代换密码的应用
Hill加密算法实验,设a-z的编号为0-25,明文P=”Hill”。
密码k=(12)(34),用Hill加密算法求出密文C。
程序设计如下:
#include
usingnamespacestd;
#defineM100//定义最大值
intmain()
{
intkey[2][2],i,j,k;
charword[M];
intword1[M];
charword2[M];
intnum;
chars[26]={'A','B','C','D','E','F','G','H','I','J','K',
'L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
cout<<"输入需要加密的明文(偶数位):
"<cin>>word;
num=strlen(word);//确定输入字母的总长度
while(num%2!
=0)
{
cout<<"输入有误,请重新输入需要加密的明文:
"<cin>>word;
num=strlen(word);
}
cout<<"请输入需要加密的密钥矩阵(0--25):
"<cin>>key[0][0];cin>>key[0][1];
cin>>key[1][0];cin>>key[1][1];//输入一个两行两列的密钥距阵
while(key[2][2]>25)
{
cout<<"输入有误,请输入需要加密的密钥矩阵:
"<cin>>key[2][2];
cin>>key[0][0];cin>>key[0][1];
cin>>key[1][0];cin>>key[1][1];
}
for(i=0;i{
for(j=0;j<26;j++)
if((word[i]==s[j])||(word[i]==(s[j]+32)))//将输入的值的下标与s数组中的字母或对应的小写字母的下标比较
word1[i]=j;//将输入的字母所对应的下标赋给word1数组
}
for(i=0;i{
word2[i]=(key[0][0]*word1[i]+key[0][1]*word1[i+1])%26;//矩阵算法
word2[i+1]=(key[1][0]*word1[i]+key[1][1]*word1[i+1])%26;//同上
}
for(j=0;j{
for(k=0;k<26;k++)
if(word2[j]==k)
word2[j]=s[k];
}
cout<<"经过Hill加密后的值为:
"<for(i=0;icout<cout<return0;
}
四、用RSA算法进行数字签名
设用户A和用户B的代号分别为2和3,并设用户A:
P=3,q=7.用户B:
P=7,q=11.计算出A,B双方的公开密匙和私密密钥。
发送方A:
用户其自身的用户代号“2”作为身份向B发送一数字签名消息,再用B得公开密匙进行加密。
接收方B,对该数字签名进行解密和身份验证。
程序设计如下:
#include
usingnamespacestd;
intmain()
{intmod(intx,inty,intz);
intf(intx,inty);
intp1=3,q1=7,p2=7,q2=11,d1,d2,m,m1,m2,n,n1,n2,e1,e2,M=2,C;
m=f(p1,q1);
m1=f(p2,q2);
cout<<"输入一个随机整数e1,它小于f(p1,q1)且与f(p1,q1)互为素数,则e1=";
cin>>e1;
cout<<"输入一个随机整数e2,它小于f(p2,q2)且与f(p2,q2)互为素数,则e2=";
cin>>e2;
n1=p1*q1;
n2=p2*q2;
for(d1=1;d1{
if(e1*d1%m==1)
{n=d1;
}}
for(d2=1;d2{
if(e2*d2%m1==1)
{m2=d2;
}}
cout<<"A的公开密钥("<cout<<"B的公开密钥("<cout<<"发送方A:
用其自身的用户代号“2”作为明文向B发出一数字签名,再用B的公开密钥进行加密:
"<C=mod(e2,M,n2);
cout<<"输出密文C="<cout<<"接收方B:
对该数字签名进行解密和身份验证。
"<M=mod(m2,C,n2);
cout<<"得到明文:
"<return0;
}
f(intx,inty)
{
intm;
m=(x-1)*(y-1);
returnm;
}
mod(intx,inty,intz)
{
intm,i;m=1;
for(i=1;i<=x;i++)
{
m=y*m;
if(m>z)m=m%z;
if(m%z==0)m=1;
}
returnm;
}
五、ELGamal密码算法的应用:
设P=7,α=2,a=3.
计算出β的值
假设A要发送X=8给B,选择一个随机数r=5.计算出密文y1,y2.
B收到密文y1,y2后,解密计算出明文X。
程序设计如下:
#include
usingnamespacestd;
voidmain()
{
inta,b,f,y1=1,y2=1,r,x,i,p;
unsignedlongj,k,g;
cout<<"输入一个大素数:
p=";
cin>>p;
cout<<"请输入本元范围在0≤α≤p-2的值:
α=";
cin>>a;
cout<<"请输入随机整数范围在0≤a≤p-2的值:
a=";
cin>>b;
cout<<"加密:
"<cout<<"请输入明文:
x=";
cin>>x;
cout<<"通过计算得β的值为:
β=";
f=x%p;
cout<cout<<"请输入随机数:
r=";
cin>>r;
for(i=0;i<(a*r);i++)
{
y2=b*y2;
y2=y2%p;
}
for(i=0;i{
y1=y1*b;
y1=y1%p;
}
y2=((x%p)*(y2%p))%p;
cout<<"经过加密计算后得:
"<}
六、RSA算法的计算技巧:
计算:
手工计算1238mod25的值。
要求写出计算步骤:
程序设计如下:
#include
usingnamespacestd;
intmain()
{inti,m,n,d;
longt=1;
cout<<"请输入底数m:
指数n:
模数d:
"<cin>>m>>n>>d;
for(i=0;i{t=t*m;
t=t%d;}//每进行一次循环就接着进行模运算,直到icout<return0;
}
7、防火墙:
1、防火墙的定义:
防火墙一般是指在两个网络之间执行访问控制策略的一个或者一组系统,它用来控制两个不同安全策略的网络之间的互访,从而防止不同安全域之间的相互危害。
2、防火墙的功能:
(1)防火墙对内部网实现了集中的安全管理,可以强化网络安全策略,比分散的主机管理更为经济。
(2)防火墙能防止非授权用户进入内部网络。
(3)防火墙可以更方便的监视网络的安全并及时报警。
(4)使用防火墙,可以网络地址的转换,即NAT,利用NAT技术,可以缓解地址资源的短缺,隐藏内部网的结构。
(5)利用防火墙对内部网络的划分,可以实现重点网段的分离,从而限制安全问题的扩散。
(6)所有的访问都经过防火墙,因此它是审计和记录网络的访问和使用的理想位置。
3、防火墙配置的基本规则:
(1)一切未被允许的就是禁止的:
在该规则下,防火墙封锁所有的信息流,只允许符合开放规则的信息进出。
这种方法可以形成一种比较安全的网络环境,但这是以牺牲用户使用的方便性为代价的。
(2)一切未被禁止的就是允许的:
在该规则下,防火墙只禁止符合屏蔽规则的信息进行出,而转发所有其他信息流。
这种方法提供了一种更为灵活的应用环境,但很难提供可靠的安全防护。
4、防火墙的配置具体步骤如下:
1.将防火墙的Console端口用一条防火墙自带的串行电缆连接到笔记本电脑的一个空余串口上,参见图1。
2.打开PIX防火电源,让系统加电初始化,然后开启与防火墙连接的主机。
3.运行笔记本电脑Windows系统中的超级终端(HyperTerminal)程序(通常在"附件"程序组中)。
对超级终端的配置与交换机或路由器的配置一样,参见本教程前面有关介绍。
4.当PIX防火墙进入系统后即显示"pixfirewall>"的提示符,这就证明防火墙已启动成功,所进入的是防火墙用户模式。
可以进行进一步的配置了。
5.输入命令:
enable,进入特权用户模式,此时系统提示为:
pixfirewall#。
6.输入命令:
configureterminal,进入全局配置模式,对系统进行初始化设置。
360木马防火墙正在运行时的界面
八、木马克星:
木马克星是专门针对国产木马的软件,该软件是动态监视网络与静态特征字扫描的完美结合,可以查杀3759种国际木马。
本软件与lockdown和TheClean相比较:
它们调用系统int21中断,只要它运行在内存中,就要不停的令cpu执行它的指令,无论任何情况下,均占用一个cpu进程,木马克星采用监视硬盘技术,不占用cpu负荷,lockdown和TheClean误报不断,任何写启动程序运行后,它仍然会提示木马,相反对国产的文件关联木马查杀率为0本软件操作更智能,占用系统资源更少,查杀木马更多!
可以在线升级木马库,每天升级!
木马克星对于木马病毒有较强的查杀效果,但是实时防护能力比较一般,因此,不适宜用作主杀工具,只可用作辅杀工具,建议用户在安装一款强大的专业反病毒软件的基础上安装和使用木马克星,偶尔调出来扫扫木马,防止有被主杀工具遗漏的漏网之鱼危害系统数据安全。
木马克星正在进行扫描病毒
查看病毒日志
木马克星运行时的界面
9、网路端口扫描:
软件名称:
ScanPortV1.2,一个小巧的网络端口扫描工具,绿色软件。
软件功能
1.精简并优化了部分关键代码,提高运行效率
2.增加线程数设置,大大提高了扫描速度:
输入正在使用的IP地址即可扫描。
ScanPort端口扫描工具