实验一古典密码-Vigernere算法实验-2022
- 格式:docx
- 大小:39.12 KB
- 文档页数:5
河南工业大学实验报告
一、实验目的
1、理解简单加密算法的原理;
2、掌握Vigenere密码的原理,完成Vigenere密码加解密程序的编写;
3、通过实验,加深对古典密码体制的了解,掌握对字符进行灵活处理的方法。
二、实验要求
根据Vigenere密码的原理编写程序,对输入的符号串能够根据设置的密钥分别正确实现Vigenere加密和解密功能。
三、实验过程及结果
3.2实验结果如下图所示
3.2.1加密测试数据一:
图1
3.2.2加密测试数据二:
图2
3.2.3解密测试数据一:
图3
3.2.4解密测试数据二:
图4
四、实验总结
在做本实验之前,前一天晚上先预习看了一下,然后到第二天做实验时大概有了思路。
当然在实验中出现了一些问题,譬如,对明文大小写字母转换成密文大小写字母,空格处理等等方面。
后来到中午经过网上搜索和同学讨论,一起解决了这些问题。
做完实验后,我清楚地知道了古典密码的加密方式解密方式,对此我产生了一些兴趣,感觉很有趣。
一、实验目的1. 理解维吉尼亚密码算法的原理和加密解密过程。
2. 掌握维吉尼亚密码算法的编程实现。
3. 通过实验,提高对密码学基础知识的理解和应用能力。
二、实验原理维吉尼亚密码算法是一种多表密码,由法国密码学家布莱斯·德·维吉尼亚(Blaise de Vigenère)于16世纪提出。
该算法利用一个密钥来生成一系列凯撒密码,通过将这些凯撒密码依次应用于明文,实现对明文的加密。
加密过程如下:1. 编号:将A-Z以编号0-25编号;2. 选取密钥:举例:wangyuhang;3. 明文处理:去掉所有空格;4. 密钥处理:将密钥重复排列;5. 加密:将明文每个字母和密钥对应位置的字母相加(mod 26),得到新的字母;6. 输出密文。
解密过程如下:1. 编号:将A-Z以编号0-25编号;2. 获取密钥:举例:wangyuhang;3. 密文处理:去掉所有空格;4. 密钥处理:将密钥重复排列;5. 解密:将密文每个字母和密钥对应位置的字母相减(mod 26),得到原始明文;6. 输出明文。
三、实验环境1. 操作系统:Windows 102. 编程语言:C++3. 开发工具:Visual Studio 2019四、实验步骤1. 创建一个名为“VigenereCipher”的C++项目。
2. 在项目中创建一个名为“VigenereCipher.h”的头文件,用于声明加密和解密函数。
3. 在项目中创建一个名为“VigenereCipher.cpp”的源文件,用于实现加密和解密函数。
4. 在项目中创建一个名为“main.cpp”的主程序文件,用于调用加密和解密函数,并进行测试。
5. 编写代码实现以下功能:(1)将明文和密钥转换为数字编码;(2)将数字编码相加(加密)或相减(解密)(mod 26);(3)将数字编码转换回字母编码;(4)输出加密后的密文和解密后的明文。
五、实验结果与分析1. 加密过程输入明文:we are discovered save yourself密钥:wangyuhang输出密文:senxadvyyoikneqywvrekueyals2. 解密过程输入密文:senxadvyyoikneqywvrekueyals密钥:wangyuhang输出明文:wearediscoveredsaveyourself通过实验,验证了维吉尼亚密码算法的正确性和实用性。
第1页 实验一 古典密码算法1、目的使学生认识理解古典密码算法:凯撒密码算法,维吉尼亚密码算法。
2、环境PC 1 PC 1 台、安装软件台、安装软件VC60VC60、、JBuilder8JBuilder8、、Delphi7Delphi7。
3、预备知识 1.凯撒密码的过程: 表1:字母编码表0 1 2 3 4 5 6 7 8 9 10 11 12a b c d e f g h i j k l m13 14 15 16 17 18 19 20 21 22 23 24 25 n o p q r s t u v w x y z 再用配对字母取代信息里的原始字母位移加密法(shift cipher):模数计算。
算。
E E k (x)=(x+k)mod 26(x)=(x+k)mod 26,,D k (y)=(y (y)=(y ––k)mod 26 如:如:k=5;k=5;k=5;““hello world hello world””加密为:加密为:mjqqt mjqqt ….2.维吉尼来密码维吉尼来方阵:(不区分大小写)数学表达式:[]([][])%26;C i P i K i =+ 验证:验证:V[0V[0V[0,,0]=00]=0;;V[25V[25,,25]=24 V[13V[13,,12]=25 0 1 2 3 4 5 6 7 8 9 10 11 12a b c d e f g h i j k l m 13 14 15 16 17 18 19 20 21 22 23 24 25 n o p q r s t u v w x y z 解密:[]([][])%26;P i C i K i =-如:如:k=k=k=””BEST BEST””;“HELLO WORLD WORLD”加密为:”加密为:”加密为:IIDE IIDE …. 4字符一组:字符一组: hell OWOR LDBEST BEST BEST 以第一行字母为列标,2行为行标(为行标(B B ,H )=I =I;; 解密:IIDEBEST BEST,,明文字母是B 行字母为I 的列号H ,或B 列=I 的行H 。
一、实验目的通过本次实验,掌握古典加密算法的基本原理和实现方法,加深对古典加密算法的理解,提高编程能力。
二、实验内容本次实验主要涉及以下古典加密算法: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和解密函数,成功实现了单表代替密码的加密和解密过程。
实验报告一、实验室名称: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、学习掌握置换密码的原理,并根据明文与密钥计算出对应的加密文,并与程序输出的结果进行比对,掌握其加密解密的过程。
vigenere加密密钥:stick(长度为5)明文:Almost all people work hard for success, but not all people can success. Many people ask how to make success. I think the answer is persistence. The way to success is full of failure and difficulty. People should never give up when meet them.AlmostallpeopleworkhardforsuccessbutnotallpeoplecansuccessManypeopleaskhowtomakesuccessI thinktheanswerispersistenceThewaytosuccessisfulloffailureanddifficultyPeopleshouldnevergiveup whenmeetthem密文:seuqc lttnz whxno ohzmr sklhy jlcem wlade lgwvk dexgyhemek flcem wlaok frxgy hemcc cawyd gfimo knkeo klqvragsvr wtvug wkquz wkakc lxveo lamyk qmwue uvmuc alnwvdhnhk aecto sglfs xyqee dmgro gitgc zhcnn fxdgb ybdgehppgx exmvd zxu解题步骤:<一>、使用CAP4软件,把密文复制进“ciphertext”中;<二>、运行“polyalphabetic tools”中的“Kasisiki”,点击“Run”得出该密文的关键字组长为5,如下:1、根据<二>运行的结果,使用普通的“vigenere”解密法,进行解密:执行“polyalphabetic Tools”中的“Low Frequency Analysis”,在“Key Word length”中输入“5”,得出最有可能关键词为“stiak”,如下:②由于知道该密文是使用Vigenere加密法而成的,所以接着运行“cipher”中的“Vigenere”进行解密。
古典密码的实验报告1. 引言古典密码是一种古老的加密技术,用于在信息传递过程中保护敏感信息的安全性。
它通过将明文转换成密文,从而使未经授权的个体无法理解信息的内容。
本实验旨在介绍几种常见的古典密码算法,并通过实验验证其加密和解密的过程。
2. 凯撒密码凯撒密码是最简单的古典密码之一,它通过将明文中的每个字母向前或向后移动固定的位置来加密信息。
例如,当移动的位置为3时,明文中的字母A将被替换为D,字母B将被替换为E,以此类推。
2.1 加密过程1.输入明文。
2.设置移动的位置。
3.对于明文中的每个字母,按照移动的位置将其替换为对应的字母。
4.得到密文。
2.2 解密过程1.输入密文。
2.设置移动的位置。
3.对于密文中的每个字母,按照移动的位置将其替换为对应的字母。
4.得到明文。
3. 维吉尼亚密码维吉尼亚密码是一种多表密码,它通过使用一系列凯撒密码表来加密信息。
每个表中的移动位置逐个递增,这样可以更好地混淆明文的结构。
3.1 加密过程1.输入明文。
2.输入密钥。
3.对于明文中的每个字母,找到对应的凯撒密码表。
4.根据对应的表和密钥,将明文中的字母替换为密文。
5.得到密文。
3.2 解密过程1.输入密文。
2.输入密钥。
3.对于密文中的每个字母,找到对应的凯撒密码表。
4.根据对应的表和密钥,将密文中的字母替换为明文。
5.得到明文。
4. 培根密码培根密码是古典密码中的另一种类型,它使用一系列相同长度的字母组成的密钥来加密信息。
明文中的每个字母都将被替换为对应密钥中的字母。
4.1 加密过程1.输入明文。
2.输入密钥。
3.对于明文中的每个字母,将其对应到密钥中的相应字母。
4.得到密文。
4.2 解密过程1.输入密文。
2.输入密钥。
3.对于密文中的每个字母,将其对应到密钥中的相应字母。
4.得到明文。
5. 实验结果与讨论在本实验中,我们使用了凯撒密码、维吉尼亚密码和培根密码进行加密和解密实验。
通过对不同算法的测试,我们发现:1.凯撒密码是最简单的古典密码之一,但由于移动位置的确定性,易受到频率分析等攻击方式的威胁。
实验一古典密码-Vigernere算法实验-2022
一、实验目的
1、理解简单加密算法的原理;
2、掌握Vigenere密码的原理,完成Vigenere密码加解密程序的编写;
3、通过实验,加深对古典密码体制的了解,掌握对字符进行灵活处
理的方法。
二、实验预习提示
1、多表代换密码
多表代换密码是指以一系列(两个以上)代换表一次对明文消息空间
中的明文消息元素进行代换的加密方法。
如果代换序列为非周期的无限序列,即对每个明文字母都采用不同的代换表(或密钥)进行加密,则相应
的密码称为一次一密钥密码。
一次一密钥密码是理论上唯一不可破译的密码,可称为是无条件安全的。
如果一个密码体制被称为是无条件安全的,即是指即便提供无穷的计
算资源,密码分析者也无法攻破该密码体制。
如果一个密码体制被称为是
计算安全的,则是指密码分析者根据可利用的资源无法攻破该密码体制。
由于一次一密钥密码需要的密钥量和明文消息长度相同,因而难以广
泛使用。
为了减少密钥量,在实际应用中多采用周期多表代换密码,即代
换表个数有限,重复地使用。
典型的多表代换密码包括维吉尼亚(Vigenere)密码、博福特(Beaufort)密码、滚动密钥(running-key)密码、弗纳姆(Vernam)密码和转轮(rotormachine)密码等。
2、Vigenere密码概述
Vigenere密码译为维吉尼亚密码或维热纳尔密码,维吉尼亚密码曾
多次被发明。
该方法最早记录在吉奥万巴蒂斯塔贝拉索(GiovanBattitaBellao)于1553年所著的书《吉奥万巴蒂斯塔贝拉索先
生的密码》(意大利语:Lacifradel.Sig.GiovanBattitaBellao)中。
然而,后来在19世纪时被误传为是法国外交官布莱斯德维吉尼亚(BlaieDeVigenère)所创造,因此现在被称为“维吉尼亚密码”。
3、Vigenere密码
Vigenere密码是使用一系列恺撒密码组成密码字母表的加密算法,
属于多表密码的一种简单形式。
在一个恺撒密码中,字母表中的每一字母
都会作一定的偏移,而Vigenere密码则是由一些偏移量不同的恺撒密码
组成。
为了生成密码,需要使用表格法。
这一表格包括了26行字母表,
每一行都由前一行向左偏移一位得到,相当于将26个恺撒密表合成一个,如表2.2.1所示。
具体使用哪一行字母表进行编译是基于密钥进行的,在
过程中会不断地变换。
表2.2.1维吉尼亚密码表
例如,假设明文为:ATTACKATDAWN
选择某一关键词并重复而得到密钥,如关键词为LEMON时,密钥为:LEMONLEMONLE
对于明文的第一个字母A,对应密钥的第一个字母L,于是使用表格
中L行字母表进行加密,得到密文第一个字母L。
类似地,明文第二个字
母为T,在表格中使用对应的E行进行加密,得到密文第二个字母某。
以
此类推,可以得到:
明文:ATTACKATDAWN密钥:LEMONLEMONLE密文:L某FOPVEFRNHR
解密的过程则与加密相反。
例如:根据密钥第一个字母L所对应的L 行字母表,发现密文第一个字母L位于A列,因而明文第一个字母为A。
密钥第二个字母E对应E行字母表,而密文第二个字母某位于此行T列,因而明文第二个字母为T。
以此类推便可得到明文。
Vigenere密码是一种以移位代换为基础的周期代换密码,其加密变换为:
Eki(mi)=mi+ki=cimodN
解密变换为:
Dki(ci)=ci-ki=mimodN
其中,ki∈K是密钥,mi∈M是明文,ci∈C是密文,N为明文字母表的长度。
可见,Vigenere密码与实验一中的单表移位密码的区别仅仅在于:单表移位密码中的位移量k是一个固定的常数;而Vigenere密码中的ki 是变化的,字母的位置不同,则所采用的位移量也不同。
本实验通过编写一个简单的Vigenere密码加密和解密程序,了解加密和解密内部的过程和相关概念,更加深入地了解其原理,掌握Vigenere算法。
三、实验过程和指导(一)实验要求
根据Vigenere密码的原理编写程序,对输入的符号串能够根据设置的密钥分别正确实现Vigenere加密和解密功能。
(二)实验准备
1、阅读教材有关章节,理解简单加密算法的原理,掌握Vigenere密码的原理。
2、初步编制好程序。
3、准备好多组测试数据。
(三)上机实验
将编写好的源代码输入计算机并进行调试分析,发现错误,再修改完善,最终实现实验所要求的功能。
首先获取要加密或解密的内容以及使用的密钥,由于Vigenere密码是由一些偏移量不同的恺撒密码组成,因此需要将待加密或解密的内容中每个字符取出,然后针对每个字符分别加以移位处理。
主要步骤如下:
1、读取要加密或解密的字符串以及使用的密钥
为简单起见,程序中可通过命令行输入要加密或解密的字符串,以及加密和解密所使用的密钥。
2、取出要加密或解密的字符串中的每个字符取出每个字符,准备分别加以移位。
3、对每个字符进行移位处理
由于Vigenere密码是由一些偏移量不同的恺撒密码所组成的,因此与恺撒密码类似,在移位后可能发生超界,需要对出现超界的情况进行处理。
此外,由于大写字母和小写字母判断是否超界的依据不同,因此程序中应将字符分为大写和小写分别处理。
(五)注意事项
1、模块化设计:将程序分成合理的多个模块(函数),每个模块做具体的同一事情。
具体到本实验,可分别编写两个函数,分别实现Vigenere加密和解密功能;
2、注意养成良好的编程风格,如空行的使用、注释的使用、缩进的使用等。
(六)分析与思考
在完成Vigenere加密和解密基本功能的基础上,进一步扩展程序功能,实现对文件的Vigenere加密和解密功能。
四、实验提交材料
1、程序源代码;
2、测试数据;
Vigenere加密和解密的实验测试数据,解密测试数据包括输入密钥正确时正确解密所得到的原始明文信息,以及输入密钥错误时解密所得到的相关明文信息。
3、实验报告。
实验报告应包括以下内容:实验名称、实验目的、实验内容及要求、实验过程及结果、实验中的问题及心得。
实验格式参见“附录:实验报告样例”。
五、程序运行结果:1、Vigenere方阵
2、Vigenere加密
2、Vigenere解密
图2.2.1Vigenere方阵
图2.2.2Vigenere加密结果
图2.2.3Vigenere解密结果(输入正确密钥)
图2.2.4Vigenere解密结果(输入错误密钥)。