实验一古典密码-Vigernere算法实验-2022

合集下载

L001001012-古典密码-维吉尼亚密码实验

L001001012-古典密码-维吉尼亚密码实验
PC网络接口,本地连接与实验网络直连。
软件描述
VC6.0
实验环境描述
1、学生机与实验室网络直连;
2、VPC1与实验室网络直连;
3、学生机与VPC1物理链路连通;
预备知识
人们在单一恺撒密码的基础上扩展出多表密码,称为“维吉尼亚”密码。它是由16世纪法国亨利三世王朝的布莱瑟·维吉尼亚发明的。维吉尼亚密码引入了“密钥”的概念,即根据密钥来决定用哪一行的密表来进行替换,以此来对抗字频统计。维吉尼亚密码的密钥空间大小为26m,所以即使m的值很小,使用穷尽密钥搜索方法也需要很长的时间。例如,当m=5时,密钥空间大小超过1.1*107,这样的密钥量已经超出了使用手算进行穷尽搜索的能力范验课题名称
L001001012-古典密码-维吉尼亚密码实验
实验目的与要求
维吉尼亚密码是古典密码中非常具有代表的例子。本实验要求用高级语言编写和调试一个简单的维吉尼亚密码实现及解密程序,通过本实验可以加深理解维吉尼亚密码原理。
实验环境
VPC1(虚拟PC)
Windows XP
VPC1连接要求
维吉尼亚密码引入了“密钥”的概念,即根据密钥来决定用哪一行的密表来进行替换,以此来对抗字频统计。假如以上面第一行代表明文字母,左面第一列代表密钥字母,对如下明文加密:
TO BE OR NOT TO BE THAT IS THE QUESTION
当选定RELATIONS作为密钥时,加密过程是:明文一个字母为T,第一个密钥字母为R,因此可以找到在R行中代替T的为K,依此类推,得出对应关系如下:
解密流程:
第一步:编号。将A-Z以编号0-25编号;
第二步:获取密钥。举例:wangyuhang;
第三步:密文处理。去掉所有空格;处理后:senxadvyyoikneqywvrekueyals;

信息安全概论1

信息安全概论1

河南工业大学实验报告
一、实验目的
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和解密函数,成功实现了单表代替密码的加密和解密过程。

实验一古典加密算法的实现

实验一古典加密算法的实现

凯撒密码映射表
明 A B C D E 文 密 D E F G H 文 F G H I J K L M I J K L M N O P
明 N O P Q R 文
S T U V W X Y Z
密 Q R S T U V W X Y Z撒密码的算法,对”Thisisanew term”进行加密 • 要求:(1)
要求
• 以密钥为:m*n=3 * 4,以及f= ((1234)(2413))对” ENGINEERING” 进行: • 要求:(1)
– 输入: ENGINEERING – 输出:(密文)
• (2)
– 输入:密文 – 输出: ENGINEERING
实验一 古典加密算法的实现
• 实验目的:
– 通过编程实现凯撒密码算法和矩阵换位密码算 法,加深对古典密码体制的了解。
• 实验原理:
– 古典加密算法的实验原理(详见下文ppt)
• 实验环境:
– 运行Windows操作系统的PC,TC编译环境
(1)凯撒密码加密算法
• 典型的单表代替密码是凯撒密码。 • 凯撒密码是最古老的代替密码,以英文26个字母 为例,它用D表示A,用E表示B,用F表示C,…, 用C表示Z,即:密文字母是明文字母后面的第三 个位置上的字母。这种映射关系表示为如下函数: • F(a)=(a十k)mod n • 其中:a表示明文字母,n为字符集中字母 个数,k=3为密钥。(移位密码、加法密码)
– 输入:Thisisanewterm – 输出:(密文)
• (2)
– 输入:密文 – 输出:Thisisanewterm
思考题:矩阵换位密码算法的实现
• 把明文中的字母按给定的顺序安排在一矩阵中,然 后用另一种顺序选出矩阵的字母来产生密文。 • 例:明文ENGINEERING按行排在3 × 4矩阵中,最 后一行不全用ABC…填充。 • E N G I 给置换f=((1234)(2413)) NIEG • N E E R ERNE • I NG A NAIG • 得到密文:NIEGERNENAIG • 密钥为:m*n=3 * 4,以及f= ((1234)(2413)) • 即:k=(m * n,f)

实验一 古典密码-Vigernere算法

实验一 古典密码-Vigernere算法
int key_length = strlen(key);
int word_length = strlen(word);
int i, j, k;
for(i = 0; i < word_length; i++)
{
j = i % key_length;
if (word[i] >= 'a' && word[i] <= 'z')
{
k = word[i] - 'a';
k = (k + key[j] - 'A') % 26;
text[i] = k + 'a';
}
else if (word[i] >= 'A' && word[i] <= 'Z')
{
k = word[i] - 'A';
k = (k + key[j] - 'A') % 26;
Vigenere加密
图1Vigenere加密结果
2、Vigenere解密
图2Vigenere解密结果(输入正确密钥)
图3Vigenere解密结果(输入错误密钥)
四,实验中的问题及心得
示范源程序在DEV C++ 上运行时存在一个不足,就是选择输入错误时加密文件和秘钥输入后会提示输入错误,但不会在进行输入程序就结束了,所以我对代码进行部分调整,使选择输入错误时,继续输入字符串和秘钥,然后报错后可以重新选择输入。本次试验主要是要加深对古典密码体制的了解,掌握对字符进行灵活处理的方法。根据Vigenere密码的原理编写程序,对输入的符号串能够根据设置的密钥分别正确实现Vigenere加密和解密功能,由于长时间没有进行编程训练,一些以前掌握的编程技巧现在都不熟悉了,作为计算机专业的学生,还是要注意平时的训练,熟能生巧。

古典密码实验报告

古典密码实验报告

实验报告一、实验室名称: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、学习掌握置换密码的原理,并根据明文与密钥计算出对应的加密文,并与程序输出的结果进行比对,掌握其加密解密的过程。

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

实验一古典密码-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解密结果(输入错误密钥)。

相关文档
最新文档