信息安全与密码学上机报告Word文档格式.docx
《信息安全与密码学上机报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《信息安全与密码学上机报告Word文档格式.docx(77页珍藏版)》请在冰点文库上搜索。
4
5
6
7
8
9
10
11
12
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
13
14
15
16
17
18
19
20
21
22
23
24
25
1.2实现过程
1.2.1程序代码
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Threading.Tasks;
usingSystem.Windows.Forms;
namespacemimaxue46.FormsClass
{
publicpartialclassyiwei:
Form
{
publicyiwei()
InitializeComponent();
}
privatevoidtextBox1_KeyPress(objectsender,KeyPressEventArgse)
privatevoidbutton1_Click(objectsender,EventArgse)
textBox3.Clear();
string[]aa=newstring[26];
aa[0]="
a"
;
aa[1]="
b"
aa[2]="
c"
aa[3]="
d"
aa[4]="
e"
aa[5]="
f"
aa[6]="
g"
aa[7]="
h"
aa[8]="
i"
aa[9]="
j"
aa[10]="
k"
aa[11]="
l"
aa[12]="
m"
aa[13]="
n"
aa[14]="
o"
aa[15]="
p"
aa[16]="
q"
aa[17]="
r"
aa[18]="
s"
aa[19]="
t"
aa[20]="
u"
aa[21]="
v"
aa[22]="
w"
aa[23]="
x"
aa[24]="
y"
aa[25]="
z"
string[]aa2=newstring[26];
aa2[0]="
A"
aa2[1]="
B"
aa2[2]="
C"
aa2[3]="
D"
aa2[4]="
E"
aa2[5]="
F"
aa2[6]="
G"
aa2[7]="
H"
aa2[8]="
I"
aa2[9]="
J"
aa2[10]="
K"
aa2[11]="
L"
aa2[12]="
M"
aa2[13]="
N"
aa2[14]="
O"
aa2[15]="
P"
aa2[16]="
Q"
aa2[17]="
R"
aa2[18]="
S"
aa2[19]="
T"
aa2[20]="
U"
aa2[21]="
V"
aa2[22]="
W"
aa2[23]="
X"
aa2[24]="
Y"
aa2[25]="
Z"
try
#region
inta=Convert.ToInt16(textBox1.Text);
stringtx=textBox2.Text;
intle=tx.Length;
int[]bb=newint[le];
string[]txt=newstring[le];
for(inti=0;
i<
le;
i++)
txt[i]=tx[i].ToString();
}//获得明文
string[]txt2=newstring[le];
for(intj=0;
j<
j++)
for(intm=0;
m<
26;
m++)
if(txt[j]==aa[m])
bb[j]=(m+a)%26;
txt2[j]=aa2[bb[j]];
}//获得密文
stringtx2="
"
for(intn=0;
n<
n++)
tx2+=txt2[n];
textBox3.Text=tx2;
#endregion
catch
MessageBox.Show("
请输入正确格式的秘钥以及明文"
);
privatevoidbutton2_Click(objectsender,EventArgse)
textBox6.Clear();
inta=Convert.ToInt16(textBox4.Text);
stringtx=textBox5.Text;
if(txt[j]==aa2[m])
intn=m-a;
if(n<
=0)
n=n+26;
txt2[j]=aa[n%26];
else
textBox6.Text=tx2;
请输入正确的秘钥以及密文"
}
1.2.2运行界面
2置换密码
2.1算法原理
在置换密码的情形下,我们也可以认为
和
是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
按照上表应有
,
,等等。
解密函数是相应的逆置换。
由下表给出:
因此,
置换密码的一个密钥刚好对应于26个英文字母的一种置换。
所有可能的置换有26!
种,这个数值超过
,是一个很大的数。
因此,采用穷尽密钥搜索的攻击方法,即使使用计算机,也是计算上不可行的。
2.2实现过程
2.2.1程序代码
publicpartialclasszhihuan:
publiczhihuan()
textBox2.Clear();
0"
string[]bb=newstring[26];
bb[0]="
bb[1]="
bb[2]="
bb[3]="
bb[4]="
bb[5]="
bb[6]="
bb[7]="
bb[8]="
bb[9]="
bb[10]="
bb[11]="
bb[12]="
bb[13]="
bb[14]="
bb[15]="
bb[16]="
bb[17]="
bb[18]="
bb[19]="
bb[20]="
bb[21]="
bb[22]="
bb[23]="
bb[24]="
bb[25]="
//设置密码加密表
stringtx=textBox1.Text;
txt[m]=tx[m].ToString();
}//明文
i++)
if(txt[i]==aa[j])
txt2[i]=bb[j];
}//密文
txt2.Length;
tx2+=txt2[i];
this.textBox2.Text=tx2;
}//还可以使用list
privatevoidtextBox1_TextChanged(objectsender,EventArgse)
privatevoidtextBox2_TextChanged(objectsender,EventArgse)
bb[0]="
bb[1]="
bb[2]="
bb[3]="
bb[4]="
bb[5]="
bb[6]="
bb[7]="
bb[8]="
bb[9]="
bb[10]="
bb[11]="
bb[12]="
bb[13]="
bb[14]="
bb[15]="
bb[16]="
bb[17]="
bb[18]="
bb[19]="
bb[20]="
bb[21]="
bb[22]="
bb[23]="
bb[24]="
bb[25]="
stringtx=textBox3.Text;
for(intj=0;
j<
le;
j++)
if(txt[j]==bb[m])
txt2[j]=aa[m];
n++)
textBox4.Text=tx2;
2.2.2运行界面
3维吉尼亚密码
3.1算法原理
密码体制
设
是一个正整数。
定义
对任意的密钥
定义:
以上所有的运算都是在
上进行。
使用前面所述的方法,对应
,则每个密钥
相当于一个长度为
的字母串,称为密钥字。
维吉尼亚密码一次加密
个明文字母。
例假设
,密钥字为CIPHER,其对应于如下的数字串K=(2,8,15,7,4,17)。
要加密的明文为:
thiscryptosystemisnotsecure
将明文串转化为对应的数字,每六个为一组,使用密钥字进行模26下的加密运算如下所示:
1978182172415191418241819
281574172815741728
21152325680238212215201
412818131419184220174
157417281574172815
19191291522825819222519
则相应的密文应该为:
VPXZGIAXIVWPUBTTMJPWIZITWZT
解密时,使用相同的密钥字,进行逆运算即可。
维吉尼亚密码的密钥空间大小为
,所以即使
的值很小,使用穷尽密钥搜索方法也需要很长的时间。
例如,当
时,密钥空间大小超过
,这样的密钥量已经超出了使用手算进行穷尽搜索的能力范围(当然使用计算机另当别论)。
3.2实现过程
3.2.1程序代码
publicpartialclassweijiniya:
publicweijiniya()
privatevoidweijiniya_Load(objectsender,EventArgse)
privatevoidbutton1_Click_1(objectsender,EventArgse)
#region秘钥
stringtx=t