信息安全与密码学上机报告.docx
- 文档编号:26146064
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:22
- 大小:136.74KB
信息安全与密码学上机报告.docx
《信息安全与密码学上机报告.docx》由会员分享,可在线阅读,更多相关《信息安全与密码学上机报告.docx(22页珍藏版)》请在冰豆网上搜索。
信息安全与密码学上机报告
《信息安全与密码学》实验报告
姓名:
学号:
学院:
班级:
成绩:
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=textBox1.Text;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 信息 安全 密码学 上机 报告