2024年4月16日发(作者:)
第2章 古典密码体制
1.当k=5,b=3时,用仿射密码加密这些字符:WO SHI XUESHENG
解:加密公式:c=e(p)=5p+3(mod26)
首先转化把这些字母转换成数字:22,14,18,7,8,23,20,4,18,7,4,13,6
然后加密
22
3
9
G
14
21
V
3
18
3
15
P
3
12
M
7
3
R
8
17
23
3
14
O
5
20
3
(mod26)
25
(mod26)
Z
;
4
3
23
X
18
3
15
P
7
3
12
M
23
4
3
X
16
Q
13
3
7
6
3
H
所以,加密后为:GV PMR OZXPMXQH。
2.使用Vigenere方案,给出密文:
ZICVTWQNGRZGVTWAVZHCQYGLMGJ,找出对应下列明文的密钥:
Wearediscoveredsaveyourself 。
解:
明文:W e a r e d i s c o v e r e d s a v e y o u r s e l f
密文:ZIC VTWQNGR ZGVTWAVZH CQ YGLMGJ
将字幕转化成数字,再计算。
结果密钥为:3 4 2 4 15 19 8 21 4
3.分析Vigenere密码体制的安全性,并编程实现Vigenere密码算法。
解:Vigenere密码的强度在于对每个明文字母有多个密文字母对应,因此该字母的频率
信息是模糊的。实际上,维吉尼亚(Vigenere)密码是一种多表加密算法,在密文的不同位
置出现的字符通常不是以同样的方式加密的,但它是一种周期密码,如果两个同样的字符出
现的间隔固定,并且为密钥长度的倍数,则它们将以同样的方法进行加密。
Vigenere算法c语言的简单实现
#include
main()
{
int i,j,m,n,c,k,Ming_length,Key_length;
char vigenere_table[26][26];
char Key[200],Ming[500] ,Mi[200],s[26][26];
printf("Vigenere Table:n");
for(j=0;j<=25;j++)
{
printf("%cn",'a'+j);
for(i=0;i<=25;i++)
{
vigenere_table[i][j]='A'+(i+j)%26;
printf("%c",vigenere_table[i][j]);
}
}
printf("n");
for(i=0;i<=25;i++)
{
printf("%c",'a'+i);
}
printf("n");
printf("请输入明文:n");
gets(Ming);
printf("请输入密钥: n");
gets(Key);
Ming_length=strlen(Ming);
Key_length=strlen(Key);
printf("n");
k=0;
printf("明文是 n");
do
{
for(j=k;j { int m=Ming[j]; int n=Key[j-k]; printf("%c",vigenere_table[m-97][n-97]); } k+=Key_length; }while(k getch(); } 4.分析Hill密码体制的安全性,并编程实现Hill密码算法。 解:Hill密码技术可以较好地抗击统计分析攻击,但在面对已知明文的攻击就很容易被 破译,特别是在已知密钥矩阵行数的情况下。 算法实现: #include #include #include #define NUM 20
发布评论