信息安全与密码学上机报告.docx
《信息安全与密码学上机报告.docx》由会员分享,可在线阅读,更多相关《信息安全与密码学上机报告.docx(77页珍藏版)》请在冰豆网上搜索。
信息安全与密码学上机报告
信息安全与密码学上机报告
《信息安全与密码学》实验报告
姓名:
学号:
学院:
班级:
成绩:
2014年12月31日
目 录
1移位密码
1.1算法原理
密码体制
令
。
对
,任意
,定义
以及
若取
,则此密码体制通常叫做凯撒密码(CaesarCipher),因为它首先为儒勒·凯撒所使用。
使用移位密码可以用来加密普通的英文句子,但是首先必须建立英文字母和模26剩余之间的一一对应关系:
如
。
将其列表如下:
A
B
C
D
E
F
G
H
I
J
K
L
M
0
1
2
3
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{
txt[i]=tx[i].ToString();
}//获得明文
string[]txt2=newstring[le];
for(intj=0;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{
tx2+=txt2[n];
}
textBox3.Text=tx2;
#endregion
}
catch
{
MessageBox.Show("请输入正确格式的秘钥以及明文");
}
}
privatevoidbutton2_Click(objectsender,EventArgse)
{
textBox6.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
{
inta=Convert.ToInt16(textBox4.Text);
stringtx=textBox5.Text;
intle=tx.Length;
string[]txt=newstring[le];
for(inti=0;i{
txt[i]=tx[i].ToString();
}//获得密文
string[]txt2=newstring[le];
for(intj=0;j{
for(intm=0;m<26;m++)
{
if(txt[j]==aa2[m])
{
intn=m-a;
if(n<=0)
{
n=n+26;
txt2[j]=aa[n%26];
}
else
{
txt2[j]=aa[n%26];
}
}
}
}
stringtx2="";
for(intn=0;n{
tx2+=txt2[n];
}
textBox6.Text=tx2;
}
catch
{
MessageBox.Show("请输入正确的秘钥以及密文");
}
}
}
}
1.2.2运行界面
2置换密码
2.1算法原理
在置换密码的情形下,我们也可以认为
和
是26个英文字母。
在移位密码中使用
是因为加密和解密都是代数运算。
但是在置换密码的情形下,可更简单的将加密和解密过程直接看作是一个字母表上的置换。
任取一置换
,便可得到一加密函数,见下表(小写字母表示明文,大写字母表示密文):
a
b
c
d
e
f
g
h
i
j
k
l
m
X
N
Y
A
H
P
O
G
Z
Q
W
B
T
n
o
p
q
r
s
t
u
v
w
x
y
z
S
F
L
R
C
V
M
U
E
K
J
D
I
按照上表应有
,
,等等。
解密函数是相应的逆置换。
由下表给出:
A
B
C
D
E
F
G
H
I
J
K
L
M
d
l
r
y
v
o
h
E
z
x
w
p
t
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
b
g
f
j
q
n
m
U
s
k
a
c
i
因此,
,
,等等。
置换密码的一个密钥刚好对应于26个英文字母的一种置换。
所有可能的置换有26!
种,这个数值超过
,是一个很大的数。
因此,采用穷尽密钥搜索的攻击方法,即使使用计算机,也是计算上不可行的。
2.2实现过程
2.2.1程序代码
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Threading.Tasks;
usingSystem.Windows.Forms;
namespacemimaxue46.FormsClass
{
publicpartialclasszhihuan:
Form
{
publiczhihuan()
{
InitializeComponent();
}
privatevoidbutton1_Click(objectsender,EventArgse)
{
textBox2.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]="0";
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[]bb=newstring[26];
bb[0]="X";bb[1]="N";bb[2]="Y";bb[3]="A";bb[4]="H";
bb[5]="P";bb[6]="O";bb[7]="G";bb[8]="Z";bb[9]="Q";
bb[10]="W";bb[11]="B";bb[12]="T";bb[13]="S";bb[14]="F";
bb[15]="L";bb[16]="R";bb[17]="C";bb[18]="V";bb[19]="M";
bb[20]="U";bb[21]="E";bb[22]="K";bb[23]="J";bb[24]="D";
bb[25]="I";//设置密码加密表
stringtx=textBox1.Text;
intle=tx.Length;
string[]txt=newstring[le];
for(intm=0;m{
txt[m]=tx[m].ToString();
}//明文
string[]txt2=newstring[le];
for(inti=0;i{
for(intj=0;j<26;j++)
{
if(txt[i]==aa[j])
{
txt2[i]=bb[j];
}
}
}//密文
stringtx2="";
for(inti=0;i{
tx2+=txt2[i];
}
this.textBox2.Text=tx2;
}//还可以使用list
privatevoidtextBox1_TextChanged(objectsender,EventArgse)
{
}
privatevoidtextBox2_TextChanged(objectsender,EventArgse)
{
}
privatevoidbutton2_Click(objectsender,EventArgse)
{
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]="0";
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[]bb=newstring[26];
bb[0]="X";bb[1]="N";bb[2]="Y";bb[3]="A";bb[4]="H";
bb[5]="P";bb[6]="O";bb[7]="G";bb[8]="Z";bb[9]="Q";
bb[10]="W";bb[11]="B";bb[12]="T";bb[13]="S";bb[14]="F";
bb[15]="L";bb[16]="R";bb[17]="C";bb[18]="V";bb[19]="M";
bb[20]="U";bb[21]="E";bb[22]="K";bb[23]="J";bb[24]="D";
bb[25]="I";
stringtx=textBox3.Text;
intle=tx.Length;
string[]txt=newstring[le];
for(inti=0;i{
txt[i]=tx[i].ToString();
}//密文
string[]txt2=newstring[le];
for(intj=0;j{
for(intm=0;m<26;m++)
{
if(txt[j]==bb[m])
{
txt2[j]=aa[m];
}
}
}//获得明文
stringtx2="";
for(intn=0;n{
tx2+=txt2[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程序代码
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Threading.Tasks;
usingSystem.Windows.Forms;
namespacemimaxue46.FormsClass
{
publicpartialclassweijiniya:
Form
{
publicweijiniya()
{
InitializeComponent();
}
privatevoidweijiniya_Load(objectsender,EventArgse)
{
}
privatevoidbutton1_Click(objectsender,EventArgse)
{
}
privatevoidbutton1_Click_1(objectsender,EventArgse)
{
#region
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[]bb=newstring[26];
bb[0]="A";bb[1]="B";bb[2]="C";bb[3]="D";bb[4]="E";
bb[5]="F";bb[6]="G";bb[7]="H";bb[8]="I";bb[9]="J";
bb[10]="K";bb[11]="L";bb[12]="M";bb[13]="N";bb[14]="O";
bb[15]="P";bb[16]="Q";bb[17]="R";bb[18]="S";bb[19]="T";
bb[20]="U";bb[21]="V";bb[22]="W";bb[23]="X";bb[24]="Y";
bb[25]="Z";
#endregion
try
{
#region秘钥
stringtx=t