现代密码学-古典密码实验报告

合集下载

2023年古典密码实验报告

2023年古典密码实验报告

实验报告一、试验室名称:SimpleSPC信息安全云试验系统二、试验项目名称:古典密码——置换密码三、试验课时:1课时四、试验原理:1) 算法原理a) 置换密码算法是不变化明文字符,而是按照某一规则重新排列消息中旳比特或字符次序,才而实现明文信息旳加密。

将明文中旳字母按照给定旳次序安排在一种矩阵中,然后用根据密钥提供旳次序重新组合矩阵中旳字母,从而形成密文。

其解密过程是根据密钥旳字母数作为列数,将密文按照列、行旳次序写出,再根据密钥给出旳矩阵置换产生新旳矩阵,从而恢复明文。

b) 置换密码(Permutation Cipher),又称换位密码。

算法实行时,明文旳字母保持相似,但次序会被打乱。

置换只不过是一种简朴旳换位,每个置换都可以用一种置换矩阵Ek来表达。

每个置换均有一种与之对应旳逆置换Dk。

置换密码旳特点是仅有一种发送方和接受方懂得旳加密置换(用于加密)及对应旳逆置换(用于解密)。

它是对明文L长字母组中旳字母位置进行重新排列,而每个字母自身并不变化。

c) 设n为一固定整数,P、C和K分别为明文空间、密文空间和密钥空间。

明/密文是长度为n旳字符序列,分别记为X(x1,x2,…,xn)属于P 和Y(y1,y2,…,yn)属于C ,K是定义在{1,2,…,n}旳所有置换构成旳集合。

对任何一种密钥(即一种置换),定义置换如下:加密置换为:解密置换为:上式中,是旳逆置换,密钥空间K旳大小为n!2) 算法参数置换密码算法重要有c、m、k、n四个参数。

c为密文,m是明文,k为密钥,n为模数。

3) 算法流程算法流程。

如图所示五、试验目旳:1)学习置换密码旳原理2)学习置换密码旳算法实现六、试验内容:1.在虚拟机上运行置换密码.exe可执行文献,根据提醒输入明文和密钥,同步检查输出旳解密后旳成果与否与明文一致。

2.学习掌握置换密码旳原理,并根据明文和密钥计算出对应旳加密文,并与程序输出旳成果进行比对,掌握其加密解密旳过程。

古典加密实验报告

古典加密实验报告

古典加密实验报告古典密码算法一、实验目的学习常见的古典密码学算法,通过编程实现替代密码算法和置换密码算法,加深对古典密码体制的了解,为深入学习密码学奠定基础。

二、实验要求分析替代密码算法和置换密码算法的功能需求,详细设计实现替代密码算法和置换密码算法的数据结构和流程,给出测试用例和测试步骤,得出测试和结论。

替代密码算法和置换密码算法的实现程序必须提供加密和解密两个接口:int encrypt()和int decrypt()。

当加密或者解密成功时返回CRYPT_OK,失败时返回CRYPT_ERROR。

三、实验原理古典密码算法曾被广泛应用,大都比较简单,使用手工和机械操作来实现加密和解密。

它的主要应用对象是文字信息,利用密码算法实现文字信息的加密和解密。

下面介绍两种算法:替代密码和置换密码。

1.替代密码的原理是使用替代法进行加密,就是将明文由其它的字母、数字或符合所代替后形成密文。

这里每个明文字母对应的密文字母可能是一个,也可能是多个。

接收者对密文进行逆向替换即可得到明文。

2.置换密码算法的原理是不改变明文字符,而是按照某一规则重新排列消息中的比特或字符顺序,才而实现明文信息的加密。

置换密码有时又称为换位密码。

我实验过程中替代密码是单表替换,用字母的下一个字母代替:for(j = 0; j < i; j++){if(96 < Mingwen[j]&&Mingwen[j] < 123){Miwen[j] = 'a' + (Mingwen[j] - 'a' + 1) % 26;}else{Miwen[j] = 'A' + (Mingwen[j] - 'A' + 1) % 26;}}置换加密主要是对密钥进行整理,还有就是动态分配二维数组,将明文和密文填充置的过程,换密码关键代码如下:for(a = 0; a < k; a++){for(b = 0; b < hang; b++){Miwen[i] = p[b][ord[j]];i++;}j++;}for(a = 0; a < 26; a++){for(b = 0; b < k; b++){if(key1[b] == alphatable[a]){ord[b] = ind++;}}}具体加密见下图:详细加密代码见附件。

古典密码的实验报告

古典密码的实验报告

古典密码的实验报告古典密码的实验报告引言:密码学作为一门古老而又神秘的学科,一直以来都吸引着人们的兴趣。

在古代,人们用各种各样的密码来保护重要信息的安全性。

本实验旨在通过实际操作,探索古典密码的加密原理和破解方法,从而深入了解密码学的基本概念和应用。

一、凯撒密码凯撒密码,又称移位密码,是最简单的一种古典密码。

其原理是通过将明文中的每个字母按照一定的规则进行移位,得到密文。

在本实验中,我们选择了一个简单的凯撒密码进行破解。

首先,我们选择了一段明文:“HELLO WORLD”,并将其按照凯撒密码的规则进行移位,假设移位数为3,则得到密文:“KHOOR ZRUOG”。

接下来,我们尝试使用暴力破解的方法来还原明文。

通过尝试不同的移位数,我们发现当移位数为3时,得到的明文与原文完全一致。

这表明我们成功地破解了凯撒密码,并还原了原始的明文。

二、维吉尼亚密码维吉尼亚密码是一种基于多个凯撒密码组合而成的密码算法。

其原理是通过使用不同的移位数对明文进行加密,从而增加了密码的复杂度。

在本实验中,我们选择了一段明文:“CRYPTOGRAPHY”,并使用维吉尼亚密码进行加密。

我们选择了一个关键词“KEY”作为加密密钥。

首先,我们将关键词“KEY”重复至与明文长度相同,得到“KEYKEYKEYKEYK”。

然后,将明文中的每个字母与关键词中对应位置的字母进行凯撒密码的移位操作。

经过加密后,我们得到了密文:“LXFOPVEFRNHR”。

接下来,我们尝试使用破解方法来还原明文。

通过尝试不同的关键词和移位数的组合,我们发现当关键词为“KEY”且移位数为3时,得到的明文与原文完全一致。

这表明我们成功地破解了维吉尼亚密码,并还原了原始的明文。

三、栅栏密码栅栏密码是一种基于换位操作的密码算法。

其原理是通过将明文中的字母按照一定的规则进行重新排列,得到密文。

在本实验中,我们选择了一段明文:“HELLO WORLD”,并使用栅栏密码进行加密。

古典算法加密实验报告

古典算法加密实验报告

一、实验目的通过本次实验,掌握古典加密算法的基本原理和实现方法,加深对古典加密算法的理解,提高编程能力。

二、实验内容本次实验主要涉及以下古典加密算法:1. 仿射密码2. 单表代替密码3. 维吉尼亚密码三、实验原理1. 仿射密码仿射密码是一种单字母替换密码,其加密原理为将明文进行0~25字母编码,按照加密公式计算出密文对应位置的字母编码,最后从密文的字母编码还原出密文对应位置的字母。

解密原理与加密原理相反。

2. 单表代替密码单表代替密码的加密原理为利用代替表,将明文中的每个字符映射到密文。

解密原理为对代替表进行反向查找,由密文映射回明文。

3. 维吉尼亚密码维吉尼亚密码的加密原理为通过加密方程Ci = (pi k(i mod m)) mod 26,由明文得到密文。

解密原理为解密过程是加密过程的逆过程,通过解密方程pi = (Ci k(i mod m)) mod 26。

四、实验步骤1. 仿射密码(1)编写加密函数encrypt,输入明文和密钥a、b,输出密文。

(2)编写解密函数decrypt,输入密文和密钥a、b,输出明文。

(3)测试加密和解密函数,验证其正确性。

2. 单表代替密码(1)编写加密函数subencrypt,输入明文和代替表,输出密文。

(2)编写解密函数subdecrypt,输入密文和代替表,输出明文。

(3)测试加密和解密函数,验证其正确性。

3. 维吉尼亚密码(1)编写加密函数vigenereencrypt,输入明文和密钥,输出密文。

(2)编写解密函数vigeneredecrypt,输入密文和密钥,输出明文。

(3)测试加密和解密函数,验证其正确性。

五、实验结果与分析1. 仿射密码通过编写encrypt和解密函数,成功实现了仿射密码的加密和解密过程。

实验结果表明,加密和解密函数运行正常,能够正确转换明文和密文。

2. 单表代替密码通过编写subencrypt和解密函数,成功实现了单表代替密码的加密和解密过程。

密码学实验报告

密码学实验报告

《—现代密码学—》实验指导书适用专业:计算机科学与技术江苏科技大学计算机科学学院2011年11 月实验一古典密码实验学时:2学时实验类型:验证实验要求:必修一、实验目的编程实现古典密码的加解密方法。

二、实验内容(1)移位密码的加密和解密函数。

(2)仿射密码的加密和解密函数。

(3)维吉尼亚密码的加密和解密函数。

三、实验原理、方法和手段(1)移位密码对于明文字符x ,加密密钥k ,加密方法为,1,2,,25y x k k =+= 解密方法为,1,2,,25x y k k =-= (2)仿射密码对于明文字符x ,加密密钥(,)a b ,加密方法为,gcd(,26)1,1,2,,25y ax b a b =+==解密方法为1()x a y b -=-(3)维吉尼亚密码选取密钥字Key ,将明文按照密钥字长度分组,将明文与密钥字对应字符相加并对26求余,即为密文字符。

i i i y x k =+解密过程为i i i x y k =-四、实验组织运行要求本实验采用集中授课形式,每个同学独立完成上述实验要求。

五、实验条件每人一台计算机独立完成实验,有如下条件:(1)硬件:微机;(2)软件:VC++6.0、VC++.Net 2005。

六、实验步骤(1)将各函数编写完成;(2)在主函数中调用各函数,实现加密和解密。

七、实验报告实验报告主要包括实验目的、实验内容、实验原理、源程序及结果。

移位密码加密:#include<stdio.h>#define n 3 //移位位数void change(char string[]){int i;for(i=0;string[i]!='\0';i++){if(string[i]>='a'&&string[i]<='z')string[i]=(string[i]+n>='z'?string[i]+n-26:string[i]+n); }}void main(){char str[100];printf("请输入一段明文");gets(str);change(str);printf("密文为:\n");puts(str);}移位密码解密:#include<stdio.h>#define n 3 //移位位数void change(char string[]){int i;for(i=0;string[i]!='\0';i++){if(string[i]>='a'&&string[i]<='z')string[i]=(string[i]+n<'a'?string[i]-n+26:string[i]-n); }}void main(){char str[100];printf("请输入一段密文");gets(str);change(str);printf("明文为:\n");puts(str);}仿射密码加密:#include<stdio.h>void fun( char a[],int x,int y) {int i;for(i=0;a[i]!='\0';i++){a[i]=(x*(a[i]-97)+y)%26+97;}}main(){char string[100];int x,y;printf("输入");gets(string);printf("请输入密钥");scanf("%d,%d",&x,&y);printf("明文:%s\n",string);fun(string,x,y);printf("密文为:%s\n",string); }仿射密码解密:#include<stdio.h>void fun( char a[],int x,int y) {int i;for(i=0;a[i]!='\0';i++){a[i]=(x*(a[i]-97)+y)%26+97;}}main(){char string[100];int x,y;printf("输入");gets(string);printf("请输入密钥");scanf("%d,%d",&x,&y);printf("密文:%s\n",string);fun(string,x,y);printf("明文:%s\n",string);}密码加密:#include<stdio.h>void change(char old[],char new1[][5]){ int i,j,t;char temp[20][5];t=strlen(old);for(i=t;i<(5-t%5)+t;i++) //将一维数组old每5个分成一组不足5位的用X 补充old[i]='x';for(i=t+(5-t%5);i<100;i++)old[i]='\0';for(i=0;i<20;i++) //将一维数组old转换成一个20*5的二维数组tempfor(j=0;j<5;j++)temp[i][j]=old[5*i+j];for(i=0;i<20;i++) //密文字母交换顺序{new1[i][0]=temp[i][1];new1[i][1]=temp[i][4];new1[i][2]=temp[i][3];new1[i][3]=temp[i][0];new1[i][4]=temp[i][2];}}main(){char old[100],new1[20][5];gets(old);change(old,new1);printf("%s",new1);}密码解密#include<stdio.h>void change(char old[],char new1[][5]){ int i,j,t;char temp[20][5];t=strlen(old);for(i=0;i<20;i++) //将一维数组old转换成一个20*5的二维数组tempfor(j=0;j<5;j++)temp[i][j]=old[5*i+j];for(i=0;i<20;i++) //密文字母交换顺序{new1[i][1]=temp[i][0];new1[i][4]=temp[i][1];new1[i][3]=temp[i][2];new1[i][0]=temp[i][3];new1[i][2]=temp[i][4];}}main(){char old[100],new1[20][5];gets(old);change(old,new1);printf("%s",new1);}实验二序列密码实验学时:2学时实验类型:验证实验要求:必修一、实验目的编程实现序列密码RC4的加密方法。

密码学实验报告

密码学实验报告

密码学实验报告信息安全实验报告学号:学生姓名:班级:实验三密码学实验一、古典密码算法实验一、实验目的通过编程实现替代密码算法和置换密码算法,加深对古典密码体制的了解,为深入学习密码学奠定基础。

二、编译环境运行windows 或linux 操作系统的PC 机,具有gcc、VC 等C语言编译环境。

三、实验原理古典密码算法历史上曾被广泛应用,大都比较简单,使用手工和机械操作来实现加密和解密。

它的主要应用对象是文字信息,利用密码算法实现文字信息的加密和解密。

下面介绍两种常见的具有代表性的古典密码算法,以帮助读者对密码算法建立一个初步的印象。

1.替代密码替代密码算法的原理是使用替代法进行加密,就是将明文中的字符用其它字符替代后形成密文。

例如:明文字母a、b、c、d ,用D、E、F、G做对应替换后形成密文。

替代密码包括多种类型,如单表替代密码、多明码替代密码、多字母替代密码、多表替代密码等。

下面我们介绍一种典型的单表替代密码,恺撒密码,又叫循环移位密码。

它的加密方法,就是将明文中的每个字母用此字符在字母表中后面第k个字母替代。

它的加密过程可以表示为下面的函数:E= mod n其中:m 为明文字母在字母表中的位置数;n 为字母表中的字母个数;k 为密钥;E为密文字母在字母表中对应的位置数。

例如,对于明文字母H,其在字母表中的位置数为8,设k=4,则按照上式计算出来的密文为L:E = mod n = mod 26 = 12 = L2.置换密码置换密码算法的原理是不改变明文字符,只将字符在明文中的排列顺序改变,从而实现明文信息的加密。

置换密码有时又称为换位密码。

矩阵换位法是实现置换密码的一种常用方法。

它将明文中的字母按照给的顺序安排在一个矩阵中,然后用根据密钥提供的顺序重新组合矩阵中字母,从而形成密文。

例如,明文为attack begins at five,密钥为cipher,将明文按照每行6 列的形式排在矩阵中,形成如下形式: a ttack b e gins a tfive根据密钥cipher中各字母在字母表中出现的先后顺序,给定一个置换: 1 2 3 4 5 6 f =1 4 5 32 6根据上面的置换,将原有矩阵中的字母按照第 1 列,第 4 列,第5 列,第 3 列,第2列,第 6 列的顺序排列,则有下面形式: a a c t tk b i n g e s a I v f te从而得到密文:abatgftetcnvaiikse其解密的过程是根据密钥的字母数作为列数,将密文按照列、行的顺序写出,再根据由密钥给出的矩阵置换产生新的矩阵,从而恢复明文。

现代密码学——古典密码算法(实验报告)

现代密码学——古典密码算法(实验报告)

安全SnoWolF/百度B英俊制作课程名称现代密码学实验实验项目名称古典密码算法练习一 Caesar密码加密时每一个字母向前推移k位,例如当k=5时,置换表如表2所示。

表2 Caesar置换表于是对于明文:datasecurityhasevolvedrapidly经过加密后就可以得到密文:IFYFXJHZWNYDMFXJATQAJIWFUNIQD若令26个字母分别对应整数0~25,如表3所示。

表3 Caesar置换表则Caesar加密变换实际上是:c=(m+k)mod26其中m是明文对应的数据,c是与明文对应的密文数据,k是加密用的参数,也称为密钥。

很容易得到相应的Caesar解密变换是:m=D(c)=(c–k)mod26例如明文:datasecurity对应的数据序列:301901842201781924当k=5时经过加密变换得到密文序列:852452397252213243对应的密文为:IFYFXJHZWNYD【实验步骤】本练习主机A、B为一组,C、D为一组,E、F为一组。

首先使用“快照X”恢复Windows系统环境。

一.手动完成Caesar密码(1) 在实验原理部分我们已经了解了Caesar密码的基本原理,那么请同学们写出当密钥k=3时,对应明文:data security has evolved rapidly的密文: GDWD VHFXULWB KDV HYROYHG UDSLGOB 。

(2) 进入实验平台,单击工具栏中的“密码工具”按钮,启动密码工具,在向导区点击“Caesar密码”。

在明文输入区输入明文:data security has evolved rapidly。

将密钥k调节到3,查看相应的密文,并与你手动加密的密文进行比较。

请根据密钥验证密文与明文对应关系是否正确。

二.Caesar加密(1) 进入“加密解密”|“Caesar密码”视图,在明文输入区输入明文(明文应为英文),单击“加密”按钮进行加密。

应用密码学实验一 古典密码

应用密码学实验一 古典密码

应用密码学实验一古典密码一、实验目的学习常见的古典密码学算法,通过编程实现替代密码算法和置换密码算法,加深对古典密码体制的了解,为深入学习密码学奠定基础。

二、实验要求分析替代密码算法和置换密码算法的功能需求,详细设计实现替代密码算法和置换密码算法的数据结构和流程,给出测试用例和测试步骤,得出测试和结论。

三、实验原理古典密码算法曾被广泛应用,大都比较简单,使用手工和机械操作来实现加密和解密。

它的主要应用对象是文字信息,利用密码算法实现文字信息的加密和解密。

下面介绍两种常见的具有代表性的古典密码算法,以帮助读者对密码算法建立一个初步的印象。

1.替代密码替代密码的原理是使用替代法进行加密,就是将明文由其它的字母、数字或符合所代替后形成密文。

这里每个明文字母对应的密文字母可能是一个,也可能是多个。

接收者对密文进行逆向替换即可得到明文。

替代密码有五种表现形式:○1单表代替即简单替代密码或者称为单字母代替,明文字母表中的一个字符对应密文字母表中的一个字符。

这是所有加密中最简单的方法。

○2多表代替即由多个简单代替组成,也就是使用了两个或两个以上的代替表。

比如使用有5个简单代替表的代替密码,明文的第一个字母用第一个代替表,第二个字母用第二个表,第三个字母用第三个表,以此类推,循环使用这五张代替表。

多表代替密码由莱昂.巴蒂斯塔于1568年发明,著名的维吉尼亚密码和博福特密码均是多表代替密码。

关于单表替代密码——凯撒(Caesar)密码,又叫循环移位密码。

它的加密方法就是将明文中的每个字母用字母表中该字母后的第R个字母来替换,达到加密的目的。

它的加密过程可以表示为下面的函数:=+E m m k n()()modE m为其中,m为明文字母在字母表中的位置数;n为字母表中的字母个数;k为密钥;()密文字母在字母表中对应的位置数。

k=,则按照上式计算出来的密例如:对于明文字母H,其在字母表中的位置数为8,设4文为L,计算过程如下:=+=+==(8)()mod(84)mod2612E m k n L2.置换密码置换密码算法的原理是不改变明文字符,而是按照某一规则重新排列消息中的比特或字符顺序,才而实现明文信息的加密。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

现代密码学实验报告院系:理学院班级:信安二班姓名:学号:前言密码学(Cryptology)是研究秘密通信的原理和破译秘密信息的方法的一门学科。

密码学的基本技术就是对数据进行一组可逆的数学变换,使未授权者不能理解它的真实含义。

密码学包括密码编码学(Cryptography)和密码分析学(Cryptanalyst)两个既对立又统一的主要分支学科。

研究密码变化的规律并用之于编制密码以保护信息安全的科学,称为密码编码学。

研究密码变化的规律并用之于密码以获取信息情报的科学,称为密码分析学,也叫密码破译学。

密码学在信息安全中占有非常重要的地位,能够为信息安全提供关键理论与技术。

密码学是一门古老而深奥的学问,按其发展进程,经历了古典密码和现代密码学两个阶段。

现代密码学(Modern Cryptology)通常被归类为理论数学的一个分支学科,主要以可靠的数学方法和理论为基础,为保证信息的机密性、完整性、可认证性、可控性、不可抵赖性等提供关键理论与技术。

古典密码算法实验在密码编码体制中有两种基本也是古老的编码体制一直沿用至今,它们是代替密码和置换密码,其历史悠久并且是现代密码体制的基本组成部分,在密码学中占有重要地位。

古典密码是密码学发展的一个阶段,也是近代密码学产生的渊源,一般把Shannon 在1949 年发表“保密系统的通信理论”之前的时期称为古典密码时期。

尽管古典密码大多比较简单,一般可用手工或机械方式实现,且都可用统计分析方法破译,目前已很少采用。

但是,古典密码所采用的代替技术和置换技术仍然是现代分组密码算法设计的基础,了解它们的设计原理,有助于理解、设计和分析现代密码。

一、实验目的通过编程实现经典的代替密码算法和置换密码,包括移位密码、维吉尼亚密码、周期置换密码、列置换密码,加深对代替技术的了解,为现代分组密码实验奠定基础。

二、实验原理代替(Substitution)是古典密码中基本的处理技巧,就是将明文字母由其他字母表中的字母替换的一种方法。

代替密码(Substitution Cipher)就是使用代替法进行加解密的密码算法。

代替密码的密钥是一个替换表,它表示了明文字母与密文字母的对应关系。

加密时,通过查表,明文字母被逐个替换后,生成看似无任何意义的字母串,即密文。

解密时,逆向使用替换表,将密文字母逐个替换为明文字母。

按照一个明文字母是否总是被一个固定的字母代替进行划分,代替密码可分为两类:(1)单表代替密码(Monoalphabetic Substitution Cipher):明文中出现的同一个字母,不管它出现在什么位置,在加密时都用相同的字母来代替。

移位密码就是单表代替密码。

(2)多表代替密码(Polyalphabetic Substitution Cipher):明文中出现的同一个字母,在加密时不是完全被相同的字母代替,而会根据其出现的位置次序用不同的字母代替。

维吉利亚密码就是多表代替密码。

1.移位密码移位密码(Shift Cipher)是一种典型的单表替代密码,也称为加法密码。

移位密码的加密方法就是将明文中的每个字母用其在字母表后面的第k 个字母替代,它的加密过程可以表示为:c = (m + k) mod n其中,m 为明文字母在字母表中的位置数;n 为字母表中的字母总数;k 为密钥;c 为密文字母在字母表中对应的位置数。

相应的,移位密码的解密过程可以表示为:m = (c - k) mod n实验代码:#include<iostream>#include<math.h>using namespace std;//定义一些全局变量char str[100]; //用于存储处理前字符串char enstr[100]; //用于存储处理后字符串int num=0; //用于累计字符数量char * p; //用于指向处理字符串int key;//加密void encrypt(){w hile(*p!='\0'){*p=(*p-97+key)%26+97;p++;}cout<<”CRYPT_OK”<<endl;c out<<"加密后字符:"<<str<<endl<<endl;}//解密void decrypt(){w hile(*p!='\0'){*p=(*p-71-key)%26+97;p++;}Cout<<”CRYPT_OK”<<endl;c out<<"解密后字符:"<<str<<endl<<endl; }void main(){i nt ord;w hile(1){cout<<"1.加密\n2.解密\n3.退出"<<endl;p=str;cout<<"请选择功能:";cin>>ord;if(ord==1){cout<<"请输入待处理字符串:"<<endl;cin>>str;p=str;cout<<"请输入密钥:";cin>>key;encrypt();}if(ord==2){cout<<"请输入待处理字符串:"<<endl;cin>>str;p=str;cout<<"请输入密钥:";cin>>key;decrypt();if(ord==3) break;}}实验结果:2.维吉尼亚密码维吉尼亚密码(Vigenere Cipher)是一种多表代替密码,其本质是周期移位密码。

维吉尼亚密码的(用户)密钥为一含有d 个字母的有限字母序列k = k0k1…k d-1加密时,首先将用户密钥进行周期扩展(周期为d),扩展后的无限字母序列称为工作密钥,记为K = K0K1…K i…其中K i = K i mod d,i=0,1,…当d=1 时,维吉尼亚密码就是移位密码。

对于含有l 个字母的明文,维吉尼亚加密过程可以表示为:c i = (m i+K i ) mod n其中,M = m0m1…m i…m l-1 为明文,C= c0c1…c i…c l-1 为密文,K = K0K1…K i…K l-1 为工作钥,n 为明文字母表的长度,l 为明文长度(含有字母的数目)。

例如,使用用户钥cat,对明文“vigenere cipher”进行维吉尼亚加密。

此时,n=26(对应英文字母表),用户钥c=3、a=0、t=19,得到的密文为“xizgnxtevkpagr”。

实验代码:#include<iostream>using namespace std;int main(){w hile(1){c har choice;c out<<endl<<"-------------维吉尼亚加密解密------------------"<<endl;c out<<"输入1进行加密,输入2进行解密,输入3退出"<<endl;c in>>choice;i f(choice=='1'){char arra[100]="",arrb[100]="",arrc[100]=""; int i=0;char a,b,c;cout<<"请输入明文:";cin>>arrb;cout<<"请输入密钥:";cin>>arra;int an=strlen(arra);int bn=strlen(arrb);if(an<bn){for(i=an;i<bn;i++)arra[i]=arra[i%an];}for(i=0;i<bn;i++){a=arra[i];b=arrb[i];c=a+b-97;if(c>90){c=char(64+c%90);arrc[i]=c;}elsearrc[i]=char(c);}cout<<"加密后密文为:";for(i=0;i<strlen(arrc);i++)cout<<arrc[i];}e lse if(choice=='2'){char arra[100]="",arrb[100]="",arrc[100]="";int i=0;char a,b,c;cout<<"请输入密文:"; cin>>arrc;cout<<"请输入密钥:"; cin>>arra;//cout<<sizeof(arra)<<endl; //cout<<strlen(arra);int an=strlen(arra);int cn=strlen(arrc);if(an<cn){for(i=an;i<cn;i++)arra[i]=arra[i%an];}for(i=0;i<cn;i++){c=arrc[i];a=arra[i];b=c-a+97;if(b<97){b=b+26;arrb[i]=char(b);}elsearrb[i]=char(b);}cout<<"解密后明文为:";for(i=0;i<strlen(arrb);i++)cout<<arrb[i];}e lse if(choice=='3')return 0;e lsecout<<endl<<"error,输入不符!!!"<<endl; }}实验结果:3.列置换密码列置换密码也称为矩阵置换密码。

其加解密方法如下:把明文字符以固定的宽度m(分组长度)水平地(按行)写在一张纸上,按1,2,…,m 的一个置换π交换列的位置次序,再按垂直方向(即按列)读出即得密文。

解密就是将密文按相同的宽度m 垂直在写在纸上,按置换π的逆置换π−1 交换列的位置次序,然后水平地读出得到明文。

相关文档
最新文档