信息安全学实验一Word下载.docx
- 文档编号:17640054
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:24
- 大小:321.84KB
信息安全学实验一Word下载.docx
《信息安全学实验一Word下载.docx》由会员分享,可在线阅读,更多相关《信息安全学实验一Word下载.docx(24页珍藏版)》请在冰豆网上搜索。
算法设计:
实现加密的过程中,先输入明文m,明文以字符串的形式储存在数组中,再输入密钥k,密钥范围为1-25,加密函数encrypt对明文m中的字符进行逐个加密E(m)=(m+k)mod26。
解密时先输入需要解密的密文c,密文以字符串的形式储存在数组中,再输入相对应的密钥k,解密函数decrypt对密文c中的字符进行逐个解密D(c)=(c-k)mod26。
该算法中时间复杂度为O(n)。
测试结果截图:
维吉尼亚密码
加密过程中,先输入明文m,明文以字符串的形式储存在数组中,再输入密钥k,维吉尼亚密码在移位密码的基础上增大了密钥空间,密钥以字符串的形式储存于数组中,加密函数encrypt按照密钥的字符循环对明文m中的字符进行逐个加密。
解密时先输入需要解密的密文c,密文以字符串的形式储存在数组中,再输入相对应的密钥k并储存在数组中,解密函数decrypt对密文c中的字符进行逐个解密。
对字符串加密:
对文本文件加密:
2、根据实验原理部分对置换密码算法的介绍,同时查找和学习相关知识,自己创建明文信息,并选择一个密钥,编写置换密码算法的实现程序,实现加密和解密操作。
该置换算法可以对文本文件进行加密解密操作。
实现置换密码加密过程,先输入明文m,明文以字符串的形式储存在数组中,再输入密钥k,密钥以字符串的形式储存于数组中,若明文不能被密钥整除,则在明文后随机添加字母使其能够被密钥整除。
对密钥字符串进行冒泡排序,根据密钥中字母得出置换函数f,将明文m存入二维数组,可以选择需要进行置换的次数,进行置换得到密文。
解密时先输入需要解密的密文c,密文以字符串的形式储存在数组中,再输入相对应的密钥k并储存在数组中,以加密相同的方式进行逆操作得到明文。
明文末尾为加密时随机添加的字母。
五、问题及总结
1、回答问题:
试分析两种密码算法的安全性,以及如何改进。
答:
实验指导书中的替换密码为移位密码,移位密码的安全性较低,产生移位的可能性只有25种,可以通过穷举的方式破译密码。
在移位密码的基础上改进的替换密码,将26个字母都由其他的字母代替,一一对应产生密码表,这种替换密码有26!
种可能的替换方式,用穷举法无法破译,但是根据语言学各个英文字母出现的频率可以破译。
在该实验中实现的第二种替换密码是维吉尼亚密码,安全性有较大的提升,其密钥空间增大,每个字母移位的长度不同,也使字母出现频率趋于平衡,密钥长度越长则密码越安全,破解该密码的要点是知道密钥的长度。
破译该实验中置换密码的切入点是明文的长度,可以根据明文的长度猜测密钥长度,密钥长度应为明文长度的约数,再对序列采用穷举即可破译,加强置换密码安全性可对明文多次置换,或想替换加密后置换加密。
2、本次实验的体会总结。
1、通过本次实验,对古典密码的两种基本加密方式有了比较深入的了解。
2、对加密和密码分析有了一定的概念。
3、了解了密码学在信息安全中的重要性。
六、附件
移位密码:
#include<
stdio.h>
string.h>
voidenc(chara[],intkey)/*加密*/
{
inti;
for(i=0;
a[i]!
='
\0'
;
i++)
a[i]=(a[i]-'
a'
+key)%26+'
}
voidencrypt()
charplain[100];
intenkey;
printf("
*************************encrypt**************************\n\n"
);
Pleaseinputtheplaintext:
"
getchar();
gets_s(plain,100);
Pleaseinputthekeyusetoencrypttheplaintext:
scanf_s("
%d"
&
enkey);
enc(plain,enkey);
Theciphertextis:
%s\n"
plain);
\n************************************************************\n"
voiddec(chara[],intkey)/*解密*/
-key+26)%26+'
voiddecrypt()
charcipher[100];
intdekey;
*************************decrypt**************************\n\n"
Pleaseinputtheciphertext:
gets_s(cipher,100);
Pleaseinputthekeyusetodecrypttheciphertext:
dekey);
dec(cipher,dekey);
Theplaintextis:
cipher);
voidmain()
intnum;
************************substitution**********************\n\n"
************************************************************\n"
while
(1)
{
printf("
Press1or2tochooseencryptordecrypt:
\n1.encrypt\n2.decrypt\n"
scanf_s("
num);
switch(num)
{
case1:
encrypt();
break;
case2:
decrypt();
default:
}
}
维吉尼亚密码:
stdlib.h>
voidenc(chararr[],chark[])/*加密*/
intlen=strlen(k);
intkey,i,j=0;
arr[i]!
if(arr[i]!
'
)
if(j>
len-1)
j=0;
key=k[j]-'
arr[i]=(arr[i]+key-'
)%26+'
j++;
charplain[100],enkey[20],ch;
loop:
printf("
Chooseftoencryptafileorstoencryptastring:
"
ch=getchar();
if(ch=='
f'
)/*文件加密*/
FILE*fp;
charfilename[20];
input:
Pleaseinputthefileuwannnaencrypt:
getchar();
gets_s(filename,20);
errno_terr;
if((err=fopen_s(&
fp,filename,"
r+"
))!
=0)
printf("
Cannotopenthefile!
\n"
gotoinput;
fgets(plain,100,fp);
Pleaseinputthekeyusetoencryptthefile:
gets_s(enkey,20);
enc(plain,enkey);
rewind(fp);
fputs(plain,fp);
fclose(fp);
\nTheencryptionhasdone,pleasecheckthefile!
elseif(ch=='
s'
)/*字符串加密*/
gets_s(plain,100);
\nTheciphertextis:
else
gotoloop;
voiddec(chararr[],chark[])/*解密*/
arr[i]=(arr[i]-key-'
+26)%26+'
charcipher[100],dekey[20],ch;
Chooseftodecryptafileorstodecryptastring:
)/*文件解密*/
Pleaseinputthefileuwannnadecrypt:
fgets(cipher,100,fp);
gets_s(dekey,20);
dec(cipher,dekey);
fputs(cipher,fp);
\nThedecryptionhasdone,pleasecheckthefile!
)/*字符串解密*/
gets_s(cipher,100);
\nTheplaintextis:
**************************vigenere************************\n\n"
switch(num)
case1:
encrypt();
break;
case2:
decrypt();
default:
exit(0);
置换密码:
time.h>
voidswap(charkey[],inti,intj)
intt=key[i];
key[i]=key[j];
key[j]=t;
voidbubble(charkey[],intcol)/*冒泡排序*/
inti,j;
i<
col;
for(j=col-1;
j>
i;
j--)
if(key[i]>
key[j])
swap(key,i,j);
voidmatch(charkey[],chark[],intf[],intcol)/*计算置换函数*/
for(j=0;
j<
j++)
if(key[i]==k[j])
f[i]=j;
voidtrans(charmid[][20],chara[][20],intf[],introw,intcol)/*列置换*/
row;
mid[i][j]=a[i][f[j]];
a=mid;
voidenc(chararr[],charkey[])/*加密*/
chara[20][20],mid[20][20],enk[20];
inti,j,cnt,m=0,n=0,k=0,f[20];
intcol=strlen(key);
intlen=strlen(arr);
if(len%col!
k=col-(len%col);
srand((unsigned)time(0));
j=len;
for(i=0;
k;
arr[j]=(rand()%26)+'
arr[j]='
introw=(len+k)/col;
enk[i]=key[i];
for(j=0;
a[i][j]=arr[m];
m++;
bubble(key,col);
match(key,enk,f,col);
Pleaseinputthecountofexchangeuwannamake:
cnt,1);
cnt;
trans(mid,a,f,row,col);
arr[n]=a[i][j];
n++;
Pleaseinputthefileuwannadecrypt:
voiddec(chararr[],charkey[])/*解密*/
chara[20][20],mid[20][20],dek[20];
inti,j,cnt,m=0,n=0,f[20];
introw=strlen(arr)/col;
dek[i]=key[i];
for(i=0;
match(dek,key,f,col);
Pleaseinputthecountofexchangeuwann
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 信息 安全 实验