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

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

实验一古典密码-Vigenere算法

一、实验目的

1、理解简单加密算法的原理;

2、掌握Vigenere密码的原理,完成Vigenere密码加解密程序的编写;

3、通过实验,加深对古典密码体制的了解,掌握对字符进行灵活处理的方法。

二、实验预习提示

1、多表代换密码

多表代换密码是指以一系列(两个以上)代换表一次对明文消息空间中的明文消息元素进行代换的加密方法。如果代换序列为非周期的无限序列,即对每个明文字母都采用不同的代换表(或密钥)进行加密,则相应的密码称为一次一密钥密码。

一次一密钥密码是理论上唯一不可破译的密码,可称为是无条件安全的。如果一个密码体制被称为是无条件安全的,即是指即便提供无穷的计算资源,密码分析者也无法攻破该密码体制。如果一个密码体制被称为是计算安全的,则是指密码分析者根据可利用的资源无法攻破该密码体制。

由于一次一密钥密码需要的密钥量和明文消息长度相同,因而难以广泛使用。为了减少密钥量,在实际应用中多采用周期多表代换密码,即代换表个数有限,重复地使用。典型的多表代换密码包括维吉尼亚(Vigenere)密码、博福特(Beaufort)密码、滚动密钥(running-key)密码、弗纳姆(Vernam)密码和转轮(rotor machine)密码等。

2、Vigenere密码概述

Vigenere密码译为维吉尼亚密码或维热纳尔密码,维吉尼亚密码曾多次被发明。该方法最早记录在吉奥万•巴蒂斯塔•贝拉索(Giovan Battista Bellaso)于1553年所著的书《吉奥万•巴蒂斯塔•贝拉索先生的密码》(意大利语:La cifra del. Sig. Giovan Battista Bellaso)中。然而,后来在19世纪时被误传为是法国外交官布莱斯•德•维吉尼亚(Blaise De Vigenère)所创造,因此现在被称为“维吉尼亚密码”。

3、Vigenere密码

Vigenere密码是使用一系列恺撒密码组成密码字母表的加密算法,属于多表密码的一种简单形式。在一个恺撒密码中,字母表中的每一字母都会作一定的偏移,而Vigenere密码则是由一些偏移量不同的恺撒密码组成。为了生成密码,需要使用表格法。这一表格包括了26行字母表,每一行都由前一行向左偏移一位得到,相当于将26个恺撒密表合成一个,如表 2.2.1所示。具体使用哪一行字母表进行编译是基于密钥进行的,在过程中会不断地变换。

表2.2.1 维吉尼亚密码表

例如,假设明文为:

ATTACKATDAWN

选择某一关键词并重复而得到密钥,如关键词为LEMON时,密钥为:

LEMONLEMONLE

对于明文的第一个字母A,对应密钥的第一个字母L,于是使用表格中L行字母表进行加密,得到密文第一个字母L。类似地,明文第二个字母为T,在表格中使用对应的E行进行加密,得到密文第二个字母X。以此类推,可以得到:

明文:ATTACKATDAWN

密钥:LEMONLEMONLE

密文:LXFOPVEFRNHR

解密的过程则与加密相反。例如:根据密钥第一个字母L所对应的L行字母表,发现密文第一个字母L位于A列,因而明文第一个字母为A。密钥第二个字母E对应E行字母表,而密文第二个字母X位于此行T列,因而明文第二个字母为T。以此类推便可得到明文。

Vigenere密码是一种以移位代换为基础的周期代换密码,其加密变换为:

E ki(m i) = m i + k i = c i mod N

解密变换为:

D ki(c i) = c i - k i = m i mod N

其中,k i∈K是密钥,m i∈M是明文,c i∈C是密文,N为明文字母表的长度。

可见,Vigenere密码与实验一中的单表移位密码的区别仅仅在于:单表移位密码中的位移量k是一个固定的常数;而Vigenere密码中的k i是变化的,字母的位置不同,则所采用的位移量也不同。

本实验通过编写一个简单的Vigenere密码加密和解密程序,了解加密和解密内部的过程和相关概念,更加深入地了解其原理,掌握Vigenere算法。

三、实验过程和指导

(一)实验要求

根据Vigenere密码的原理编写程序,对输入的符号串能够根据设置的密钥分别正确实现Vigenere加密和解密功能。

(二)实验准备

1、阅读教材有关章节,理解简单加密算法的原理,掌握Vigenere密码的原理。

2、初步编制好程序。

3、准备好多组测试数据。

(三)上机实验

将编写好的源代码输入计算机并进行调试分析,发现错误,再修改完善,最终实现实验所要求的功能。

(四)程序思路(仅供参考)

首先获取要加密或解密的内容以及使用的密钥,由于Vigenere密码是由一些偏移量不同的恺撒密码组成,因此需要将待加密或解密的内容中每个字符取出,然后针对每个字符分别加以移位处理。主要步骤如下:

1、读取要加密或解密的字符串以及使用的密钥

为简单起见,程序中可通过命令行输入要加密或解密的字符串,以及加密和解密所使用的密钥。

2、取出要加密或解密的字符串中的每个字符

取出每个字符,准备分别加以移位。

3、对每个字符进行移位处理

由于Vigenere密码是由一些偏移量不同的恺撒密码所组成的,因此与恺撒密码类似,在移位后可能发生超界,需要对出现超界的情况进行处理。此外,由于大写字母和小写字母判断是否超界的依据不同,因此程序中应将字符分为大写和小写分别处理。

(五)注意事项

1、模块化设计:将程序分成合理的多个模块(函数),每个模块做具体的同一事情。具体到本实验,可分别编写两个函数,分别实现Vigenere加密和解密功能;

2、注意养成良好的编程风格,如空行的使用、注释的使用、缩进的使用等。

(六)分析与思考

在完成Vigenere加密和解密基本功能的基础上,进一步扩展程序功能,实现对文件的Vigenere加密和解密功能。

四、实验提交材料

1、程序源代码;

2、测试数据;

Vigenere加密和解密的实验测试数据,解密测试数据包括输入密钥正确时正确解密所得到的原始明文信息,以及输入密钥错误时解密所得到的相关明文信息。

3、实验报告。

实验报告应包括以下内容:实验名称、实验目的、实验内容及要求、实验过程及结果、实验中的问题及心得。

实验格式参见“附录:实验报告样例”。

相关文档
最新文档