当前位置:文档之家› 实验一 古典密码-Vigernere算法实验-2017

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

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

实验一古典密码-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、实验报告。

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

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

五、程序运行结果:

1、Vigenere方阵

图2.2.1 Vigenere方阵

2、Vigenere加密

图2.2.2 Vigenere加密结果

2、Vigenere解密

图2.2.3 Vigenere解密结果(输入正确密钥)

图2.2.4 Vigenere解密结果(输入错误密钥)

古典密码学实验

一、实验背景与目的 通过实现简单的古典密码算法,理解密码学的相关概念如明文(plaintext)、密文(ciphertext)、加密密钥(encryption key)、解密密钥(decryption key)、加密算法(encryption algorithm)、解密算法(decryption algorithm)等。 二、实验环境 Visual C++6.0 三、实验内容 (1)用C\C++语言实现仿射变换(Affine)加/解密算法;2) (2)用C\C++语言实现统计26个英文字母出现的频率的程序; (3)利用仿射变换加/解密程序对一段较长的英文文章进行加密,再利用统计 软件对明文和密文中字母出现的频率进行统计并作对比,观察有什么规 律。 其中a, b为密钥, 25 , 0≤ ≤b a ,且gcd(a, 26)=1 实验要求:加/解密程序对任意满足条件的a、b都能够处理。仿射变换: 加密: ()26 mod , b am m E c b a + = = 解密: ()()26 mod 1 , b c a c D m b a - = =- 四、实验原理 一个仿射变换对应于一个矩阵和一个向量的乘法,而仿射变换的复合对应于普通的矩阵乘法,只要加入一个额外的行到矩阵的底下,这一行全部是0除了最右边是一个1,而列向量的底下要加上一个1。仿射变换原理在基于MQ问题的多变元公钥密码中,公钥一般是方程组,但是这种没有处理的方程组很容易受到插值法的攻击,例如:首先在q元有限域上选取个变量以及个变量。构造方程组:这里面公钥信息方程组就是:其中是明文信息,而则是密文。可以看出这样的公钥信息很容易受到插值法的攻击,下面使用仿射将

实验二 古典密码

实验2 古典密码 1.实验目的 (1)了解古典密码中的基本加密运算。 (2)了解几种典型的古典密码体制。 (3)掌握古典密码的统计分析方法。 2.实验内容 (1)古典密码体制 ①简单移位加密(单表代换) 该加密方法中,加密时将明文中的每个字母向前推移K位。经典恺撒密码加密变换就是这种变换,取k=3。 步骤1:打开CAP4软件,并加载实验一附带的“mw.txt”,如图2-1所示。 图2-1加载文件

步骤2:采用恺撒加密方法手工加密“mw.txt”;打开CAP4菜单栏“Cipher”菜单项选择“simple shift”选项,并选择移位值“shift value”为3,加密步骤1中加载的文件,如图2-2所示。 图2-2 参数设置 图2-3加密文件

步骤3:比较二者的加密结果是否相同。 步骤4:点击CAP4软件中的“Simple analysis”下的“shift”键,观察恺撒加密法的可能密钥值,并分析其攻击的难度,如图2-4所示。 图2-4密钥分析 ②仿射密码加密(单表代换) 在仿射密码加密(affine cipher)中,字母表中的字母被赋予一个数字,例如,a=0,b=1,c=2,…,z=25.仿射密码加密法的密钥为0~25之间的数字对(a,b)。a与26的最大公约数必须为1,这就是说能整除a和26的数只有1.现在假设m为明文字母的数字,而c为密文字母的数字,那么,这两个数字之间有如下关系: c=(am+b)(mod 26) m=a-1(c-b)(mod 26) 其中,(mod 26)的操作是:除以26,得其余数。 例如,选取密钥为(7,3)。因为7与26互素,也就是只有公约数1,所以(7,3)可以作为仿射密码的加密钥。将“hot”转换成数字7、14、19,利用仿射等式生成: c(H)=(7×7+3) mod 26=52 mod 26=0,即为字母“a“。 c(O)=(7×14+3) mod 26=101 mod 26=23,即为字母“x“. c(T)=(7×19+3) mod 26=136 mod 26=6,即为字母”g”. 这样,对于这个密钥,”hot”变成了“axg“.

实验报告_密码学

信息安全实验报告 学号: 学生姓名: 班级:

实验三密码学实验 一、古典密码算法实验 一、实验目的 通过编程实现替代密码算法和置换密码算法,加深对古典密码体制的了解,为深入学习密码学奠定基础。 二、编译环境 运行windows 或linux 操作系统的PC 机,具有gcc(linux)、VC (windows)等C语言编译环境。 三、实验原理 古典密码算法历史上曾被广泛应用,大都比较简单,使用手工和机械操作来实现加密和解密。它的主要应用对象是文字信息,利用密码算法实现文字信息的加密和解密。下面介绍两种常见的具有代表性的古典密码算法,以帮助读者对密码算法建立一个初步的印象。 1.替代密码 替代密码算法的原理是使用替代法进行加密,就是将明文中的字符用其它字符替代后形成密文。例如:明文字母a、b、c、d ,用D、E、F、G做对应替换后形成密文。 替代密码包括多种类型,如单表替代密码、多明码替代密码、多字母替代密码、多表替代密码等。下面我们介绍一种典型的单表替代密码,恺撒(caesar)密码,又叫循环移位密码。它的加密方法,就是将明文中的每个字母用此字符在字母表中后面第k个字母替代。它的加密过程可以表示为下面的函数:E(m)=(m+k) mod n 其中:m 为明文字母在字母表中的位置数;n 为字母表中的字母个数;k 为密钥;E(m)为密文字母在字母表中对应的位置数。例如,对于明文字母H,其在字母表中的位置数为8,设k=4,则按照上式计算出来的密文为L:E(8) = (m+k) mod n = (8+4) mod 26 = 12 = L

2.置换密码 置换密码算法的原理是不改变明文字符,只将字符在明文中的排列顺序改 变,从而实现明文信息的加密。置换密码有时又称为换位密码。 矩阵换位法是实现置换密码的一种常用方法。它将明文中的字母按照给的 顺序安排在一个矩阵中,然后用根据密钥提供的顺序重新组合矩阵中字母,从而 形成密文。例如,明文为attack begins at five,密钥为cipher,将明文按照每行 6 列的形式排在矩阵中,形成如下形式: a t t a c k b e g i n s a t f i v e 根据密钥cipher中各字母在字母表中出现的先后顺序,给定一个置换: 1 2 3 4 5 6 f = 1 4 5 3 2 6 根据上面的置换,将原有矩阵中的字母按照第 1 列,第 4 列,第 5 列,第 3 列, 第2列,第 6 列的顺序排列,则有下面形式: a a c t t k b i n g e s a I v f t e 从而得到密文:abatgftetcnvaiikse 其解密的过程是根据密钥的字母数作为列数,将密文按照列、行的顺序写出,再根据由密钥给出的矩阵置换产生新的矩阵,从而恢复明文。 四、实验内容和步骤 1、根据实验原理部分对替代密码算法的介绍,自己创建明文信息,并选择 一个密钥k,编写替代密码算法的实现程序,实现加密和解密操作。 2、根据实验原理部分对置换密码算法的介绍,自己创建明文信息,并选择一个密钥,编写置换密码算法的实现程序,实现加密和解密操作。 五、总结与思考 记录程序调试过程中出现的问题,分析其原因并找出解决方法。记录最终实现的程序执行结果。

信息安全 实验五 古典密码算法

实验五古典密码算法 实验目的: 通过编程实现替代密码算法和置换密码算法,加深对古典密码体制的了解,为深入学习密码学奠定基础。 实验环境: 运行Windows 或Linux 操作系统的PC 机,具有gcc(Linux)、VC(Windows)等C 语言编 译环境。 实验原理: 古典密码算法曾被广泛应用,大都比较简单,使用手工和机械操作来实现加密和解密。它的主要应用对象是文字信息,利用密码算法进行文字信息的加密和解密。下面介绍两种常见的具有代表性的古典密码算法,以帮助读者对密码算法建立一个初步的印象。 1. 替代密码 替代密码算法的原理是使用替代法进行加密,就是将文中的字符用其它字符替代后形成密文。例如,明文字母a、b、c、d,用D、E、F、G 做对应替换后形成密文。 替代密码包括多种类型,如单表替代密码、多明码替代密码、多字母替代密码、多表替 代密码等。下面我们介绍一种典型的单表替代密码——凯撒(Caesar)密码,又叫循环移位密码。它的加密方法就是将文中的每个字母用此字符在字母表中后面第K 个字母替代。它的加密过程可以表示为下面的函数: E(m)=(m+k) mod n 其中,m 为明文字母在字母表中的位置数;n 为字母表的字母个数;k 为密钥;E(m)为 密文字母在字母表中对应的位置数。 例如,对于明文字母H,其在字母表中的位置数为8,设k=5,则按照上式计算出来的 密文为L,计算过程如下: E(8)=(m+k) mod n=(8+5) mod 26=13=I 2. 置换密码 置换密码算法的原理是不改变明文字符,只将字符在明文中的排列顺序改变,从而实现 明文信息的加密。置换密码有时又称为换位密码。 矩阵换位法是实现置换密码的一种常用方法。它将明文中的字母按照给定的顺序安排在 一个矩阵中,然后根据密钥提供的顺序重新组合矩阵中的字母,从而形成密文。例如,明文为attack begins at five,密钥为cipher,将明文按照每行6 个字母的形式排在矩阵中,形成如 下形式: a t t a c k b e g i n s a t f i v e 根据密钥cipher 中各字母在字母表中出现的先后顺序,给定一个置换:

信息安全 实验一 古典密码算法C语言

信息安全实验报告 课程名称: _ 专业:计算机科学与技术 _2010_级_02班 实验编号:实验项目_ 指导教师_ _ 姓名:闫斌学号: 2010012854 实验成绩:___ 实验一古典密码算法 实验名称:古典密码算法 实验类型: 设计性实验 学时:4 适用对象: 信息安全 1.实验原理 古典密码算法历史上曾被广泛应用,大都比较简单,使用手工和机械操作来实现加密和解密。它的主要应用对象是文字信息,利用密码算法实现文字信息的加密和解密。下面介绍两种常见的具有代表性的古典密码算法,以帮助读者对密码算法建立一个初步的印象。 2.实验目的 通过变成实现替代密码算法和置换密码算法,加深对古典密码体质的了解,为深入学习密码学奠定基础。 3.实验环境 运行windows或linux操作系统的pc机,具有gcc(linux)、VC(Windows)等C语言编译环境。 4.实验内容 4.1替代密码算法 4.1.1 根据实验远离部分对替代密码算法的介绍,创建明文信息,并选择一个密钥k,编写替代密码算法的实现程序,实现加密和解密操作。 替代密码包括多种类型,如单表替代密码、多明码替代密码、多字母替代密码、多表替代密码等。 4.1.2 替代密码算法的远离是使用替代法进行加密,就是将明文的字符用其他字符替代后形成密文。例如字母a、b、c、d,用D、E、F、G做对应替换后形成密文。 4.1.3 代码

#include #include #include #define N 500 int main() { /*--------------------------------*/ int i=0,k,m,n,l; char str1[N],str2[N]; /*C=M+K...K is key...*/ clrscr(); /*--------------------------------*/ printf("This is a code password program......\n"); printf("Please input proclaimed in writing(M)::\n"); gets(str1);/*输入要加密的明文M*/ printf("Please input the key(K)(int)::\n"); scanf("%d",&k);/*输入密钥K*/ m=strlen(str1);/*测试明文的长度*/ printf("The M length is %d\n",m); printf("\n *\n *\n *\n***\n *\n"); printf("ciphertext(C) is ::\n\n"); for(i=0;i96&&n<123)/*对小写进行加密*/ { n=(n-97+k)%26; if(n<0) n=26+n; l=(char)(n+97); printf("%c",l); str2[i]=l; } else if(n>64&&n<91)/*对大写进行加密*/ { n=(n-65+k)%26; if(n<0)

实验一 古典密码-Vigernere算法

实验一古典密码-Vigenere算法 班级:学号:姓名: 一、实验目的 1、理解简单加密算法的原理; 2、掌握Vigenere密码的原理,完成Vigenere密码加解密程序的编写; 3、通过实验,加深对古典密码体制的了解,掌握对字符进行灵活处理的方法。 二,实验要求 根据Vigenere密码的原理编写程序,对输入的符号串能够根据设置的密钥分别正确实现Vigenere加密和解密功能。 三,实验过程及内容 源程序 #include "stdio.h" #include "string.h" #define BUF_MAX 100 static int square[27][27]; //密钥统一转换为大写字母 void UpperKey(char key[]) { int key_length = strlen(key); for(int i = 0; i < key_length; i++) { if (key[i] >= 'a' && key[i] <= 'z') { key[i] -= 32; } } } //Vigenere加密 void VigenereEncrypt(char word[], char key[]) { char text[BUF_MAX]; 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; text[i] = k + 'A'; } else { text[i] = word[i]; } } text[i] = '\0'; printf("Encrypt string:"); puts(text); } //Vigenere解密 void VigenereDecript(char en_word[], char key[]) { char word[BUF_MAX]; int key_length = strlen(key); int word_length = strlen(en_word); int i, j, k; for(i = 0; i < word_length; i++) { j = i % key_length; if (en_word[i] >= 'a' && en_word[i] <= 'z')

信息安全实验报告一

实验成绩 《信息安全概论》实验报告 实验一古典密码实验 专业班级:学号:姓名:完成时间:2016/ 05/ 09 一、实验目的 理解简单加密算法的原理;掌握凯撒密码的原理,完成凯撒密码加解密程序的编写;通过实验,加深对古典密码体制的了解,掌握对字符进行灵活处理的方法。 二、实验内容 根据凯撒密码的原理编写程序,对输入的符号串能够根据设置的密钥分别正确实现凯撒加密和解密功能。 三、实验环境和开发工具 1.Windows 7 系统 2.Eclipse 3.JDK 1.7 四、实验步骤和结果 首先获取要加密的内容以及密钥,凯撒密码的密钥即字符移动的位数。由于凯撒密码器的移位是针对字符的,因此需要将待加密的内容中每个字符取出,然后针对每个字符分别加以移位。主要步骤如下: (1)读取要加密的字符串、密钥。 (2)取出字符串中每个字符。 使用字符串类的 charAt()方法取出每个字符,分别加以移位。

(3)对每个字符进行移位。 由于字母表中共26个字符,因此移位前先将移动的位数(key)和26取模。由于Java中字符和整型可自动转换,因此将字符加上一个正整数即代表在字母表中右移多少位。如果移动的位数是负值,则代表在字母表中左移多少位。 尽管在移动之前已经将移动的位数和26取了模,但通过这种方式实现右移或左移仍可能发生超界。如字母x右移4位应该是字母b,但将字母x增加4后超出26个字母的范围。因此移位后使用两个if语句判断一下,如果向左超界(c<'a')则增加26;向右超界(c>'z')则减去26。 源程序: package Caesar; import java.io.*; import java.util.Scanner; /** * @author SiRuYan */ public class Caesar { // 声明一些全局变量 public static String path; public static String estr = ""; public static char c; /** * 凯撒密码加密方法 * * @param str * @param n */ public static void Encode(String str, int n) { for (int i = 0; i < str.length(); i++) { c = str.charAt(i); if (c >= 'a' && c <= 'z') if (c + n % 26 <= 'z') // 移位后的字母不大于小写字母z,直接移位 estr += (char) (c + n % 26); else // 移位后的字母大于小写字母z,需要在26个字母之间循环 estr += (char) ('a' + ((n - ('z' - c) - 1) % 26)); else if (c >= 'A' && c <= 'Z')

古典加密实验报告

古典密码算法 一、实验目的 学习常见的古典密码学算法,通过编程实现替代密码算法和置换密码算法,加深对古典密码体制的了解,为深入学习密码学奠定基础。 二、实验要求 分析替代密码算法和置换密码算法的功能需求,详细设计实现替代密码算法和置换密码算法的数据结构和流程,给出测试用例和测试步骤,得出测试和结论。替代密码算法和置换密码算法的实现程序必须提供加密和解密两个接口: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++; } } } 具体加密见下图:

古典密码

实验1: 古典密码 一、实验名称和性质 二、实验目的 掌握古典密码体制中的基本加密解密运算,如加法密码、仿射密码等,几种典型的古典密码体制,如Hill体制,以及关于这些古典密码体制的一些破译方法。 三、实验的软硬件环境要求 硬件环境要求: 单机,无需上Internet网。 使用的软件名称、版本号以及模块: 使用Matlab,版本6.0或以上。 四、知识准备 前期要求掌握的知识: Matlab编程 实验相关理论或原理: 古典密码的基本加密解密运算,几种典型古典密码的加密解密算法。 实验流程: 五、实验要求和注意事项 1.完成给出的程序中标有“-----------------------”部分的编程。 2.参照例子的做法,完成实验题目。要求给出完整的过程,包括程序,实验结果。 六、实验步骤和内容 1.基本的加密解密运算 例1. 使用加法密码(或称为移位密码)获得密文kddkmu,尝试所有的可能性来解密它。解:编写allshift程序,调用该程序 allshift('kddkmu') 运行结果为 kddkmu leelnv mffmow nggnpx ohhoqy piiprz qjjqsa rkkrtb sllsuc tmmtvd unnuwe voovxf wppwyg

xqqxzh yrryai zsszbj attack 是列表上出现的唯一单词,所以它就是明文buubdl cvvcem dwwdfn exxego fyyfhp gzzgiq haahjr ibbiks jccjlt function y = allshift(x); % This function displays all of the shifts of the message x for j=0:25, ------------ ; disp(z); end function y = shift(x,b); % This function performs the shift encryption function % y = x + b mod 26 % We assume that x is a text string and b is a number % The result is kept in text representation xnum=text2int(x); -----------------------; y=int2text(ynum); function y = text2int (x) % This function takes the letter in the string x and converts % it to an integer. % The convention for this function is % a --> 0 % b --> 1 % and so on... if ( (x < 'a') | (x > 'z') ), error('Text character out of range a-z'); end; y=x - 'a'; %It helps to know Matlab tricks

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

现代密码学 实 验 报 告 院系:理学院 班级:信安二班 姓名: 学号:

前言 密码学(Cryptology)是研究秘密通信的原理和破译秘密信息的方法的一门学科。密码学的基本技术就是对数据进行一组可逆的数学变换,使未授权者不能理解它的真实含义。密码学包括密码编码学(Cryptography)和密码分析学(Cryptanalyst)两个既对立又统一的主要分支学科。研究密码变化的规律并用之于编制密码以保护信息安全的科学,称为密码编码学。研究密码变化的规律并用之于密码以获取信息情报的科学,称为密码分析学,也叫密码破译学。 密码学在信息安全中占有非常重要的地位,能够为信息安全提供关键理论与技术。密码学是一门古老而深奥的学问,按其发展进程,经历了古典密码和现代密码学两个阶段。现代密码学(Modern Cryptology)通常被归类为理论数学的一个分支学科,主要以可靠的数学方法和理论为基础,为保证信息的机密性、完整性、可认证性、可控性、不可抵赖性等提供关键理论与技术。

古典密码算法实验 在密码编码体制中有两种基本也是古老的编码体制一直沿用至今,它们是代替密码和置换密码,其历史悠久并且是现代密码体制的基本组成部分,在密码学中占有重要地位。古典密码是密码学发展的一个阶段,也是近代密码学产生的渊源,一般把Shannon 在1949 年发表“保密系统的通信理论”之前的时期称为古典密码时期。尽管古典密码大多比较简单,一般可用手工或机械方式实现,且都可用统计分析方法破译,目前已很少采用。但是,古典密码所采用的代替技术和置换技术仍然是现代分组密码算法设计的基础,了解它们的设计原理,有助于理解、设计和分析现代密码。 一、实验目的 通过编程实现经典的代替密码算法和置换密码,包括移位密码、维吉尼亚密码、周期置换密码、列置换密码,加深对代替技术的了解,为现代分组密码实验奠定基础。 二、实验原理 代替(Substitution)是古典密码中基本的处理技巧,就是将明文字母由其他字母表中

密码学实验讲义及实验报告2014

密码学基础 实验指导书 黑龙江大学计算机科学技术学院 2013年3月

目录 前言........................................................................................................................... - 2 -要求与评分标准....................................................................................................... - 3 -1要求. (3) 2评分标准 (3) 实验1 古典密码的实现(3学时) .................................................................... - 4 -实验2 对称密钥密码体制的实现(6学时) .................................................... - 4 -实验3 公开密钥密码算法的实现(6学时) .................................................... - 5 -实验4 数字签名算法的实现(3学时) ............................................................ - 5 -附录1:实验报告格式 ........................................................................................... - 7 -

密码学实验

《密码学与信息安全》实验报告 专业 班级 姓名 学号 2015年 6 月 5 日

实验一古典密码实验 1实验目的 1.理解代替密码学加密过程 2.理解置换密码学加密过程 2实验内容 1.手动完成Caesar密码 2.Caesar加密 3.Caesar密码分析 4.单表置换密码 5.单表置换密码分析 3实验过程 本练习主机A、B为一组,C、D为一组,E、F为一组。 首先使用“快照X”恢复Windows系统环境。 1.手动完成Caesar密码 (1)在实验原理部分我们已经了解了Caesar密码的基本原理,那么请同学们写出当密钥k=3时,对应明文:data security has evolved rapidly的密文:data security has evolved rapidly 。 (2)进入实验平台,单击工具栏中的“密码工具”按钮,启动密码工具,在向导区点击“Caesar密码”。在明文输入区输入明文:data security has evolved rapidly。 将密钥k调节到3,查看相应的密文,并与你手动加密的密文进行比较。 请根据密钥验证密文与明文对应关系是否正确。 2.Caesar加密 (1)进入“加密解密”|“Caesar密码”视图,在明文输入区输入明文(明文应为英文),单击“加密”按钮进行加密。 请将明文记录在这里:I am a stident 。 (2)调节密钥k的微调按钮或者对照表的移位按钮,选择合适的密钥k值,并记下该密钥k值用于同组主机的解密。加密工作完成后,单击“导出”按钮将密文默认导出到Caesar共享文件夹(D:\Work\Encryption\Caesar\)中,默认文件名为Caesar密文.txt。 (3)通知同组主机接收密文,并将密钥k通告给同组主机。6 (4)单击“导入”按钮,进入同组主机Work\Encryption\Caesar目录(\\同组主机IP\Work\Encryption\Caesar),打开Caesar密文.txt。 (5)调节密钥k的微调按钮或对照表的移位按钮,将k设为同组主机加密时的密钥k 值,这时解密已经成功。请将明文写出:I am a stident 。 (6)将解密后的明文与同组主机记录的明文比较,请对比明文是否相同。 3.Caesar密码分析 (1)本机进入“密码工具”|“加密解密”|“Caesar密码”,在明文输入区输入明文(要求明文有一定的意义以便让同组主机分析)。 请将明文记录在这里:I am a stident 。 (2)调节密钥k的微调按钮或者对照表的移位按钮,选择合适的密钥k值完成Caesar 加密,单击“导出”按钮,将密文默认导出到Caesar共享文件夹中。 (3)通告同组主机(不要通告密钥值k)密文已经放在共享文件夹中,让同组主机获取密文。 (4)单击“导入”按钮将同组主机Caesar密文导入。

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

实验一古典密码-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 维吉尼亚密码表

古典密码算法

实验一古典密码算法 古典密码算法曾经被广泛应用,大都比较简单,使用手工和机械操作来实现加密和解密。它的主要对象是文字信息,利用密码算法实现文字信息的加密和解密。古典密码学可以分为代替密码(也叫做移位密码)和置换密码(也叫做换位密码)两种,其中代替密码典型的有Caesar密码,数乘密码和仿射变换等,置换密码有单表置换和多表置换等。 一、实验目的 1.理解代替密码学加密过程 2.理解置换密码学加密过程 二、实验环境 Windows,交换网络结构,每组2人,VC++6.0,密码工具 三、实验原理 1.Caesar(恺撒)密码 Caesar密码是传统的代替加密法,当没有发生加密(即没有发生移位)之前,其置换表如1-1所示。 加密时每一个字母向前推移k位,例如当k=5时,置换表如1-2所示。 于是对于明文:data security has evolved rapidly 经过加密后就可以得到密文:IFYF XJHZWNYD MFX JATQAJI WFUNIQD 若令26个字母分别对应整数0~25,如表1-3所示。 则Caesar加密变换实际上是: c = (m + k) mod 26

其中m是明文对应的数据,c是与明文对应的密文数据,k是加密用的参数,也称为密钥。 很容易得到相应的Caesar解密变换是: m = D(c) = (c – k) mod 26 例如明文:data security 对应的数据序列: 3 0 19 0 18 4 2 20 17 8 19 24 当k = 5时经过加密变换得到密文序列: 8 5 24 5 23 9 7 25 22 13 24 3 对应的密文为: I F Y F X J H Z W N Y D 2.单表置换密码 单表置换密码也是一种传统的代替密码算法,在算法中维护着一个置换表,这个置换表记录了明文和密文的对照关系。当没有发生加密(即没有发生置换)之前,其置换表如1-4所示。 在单表置换算法中,密钥是由一组英文字符和空格组成的,称之为密钥词组,例如当输入密钥词组:I LOVE MY COUNTRY后,对应的置换表如表1-5所示。 在表1-2中 ILOVEMYCUNTR是密钥词组I LOVE MY COUNTRY略去前面已出现过的字符O 和Y依次写下的。后面ABD……WXZ则是密钥词组中未出现的字母按照英文字母表顺序排列成的,密钥词组可作为密码的标志,记住这个密钥词组就能掌握字母加密置换的全过程。 这样对于明文:data security has evolved rapidly,按照表1-2的置换关系,就可以得到密文:VIKI JEOPHUKX CIJ EQDRQEV HIFUVRX。 四、实验步骤 主机A、B为一组,C、D为一组,E、F为一组。首先使用“快照X”恢复Windows系统环境。 1.Caesar密码 (1)手动完成Caesar密码 1)在实验原理部分我们已经了解了Caesar密码的基本原理,那么请同学们写出当密 钥k=3时,对应明文:data security has evolved rapidly的密文: _______________________________________________________________________。 2)进入实验平台,单击工具栏中的“密码工具”按钮,启动密码工具,在向导区点击 “Caesar密码”。在明文输入区输入明文:data security has evolved rapidly。

移位密码实验报告

实验报告 姓名: 2222 学号: 022222 班级:2222全日期: 22222 1 古典密码(移位密码) 一、实验环境 1.硬件配置:处理器:Corei5 M 450@ 2.40GHZ,内存2GB,主硬盘 320G 2.使用软件: (1)操作系统:win7 (2)软件工具:Microsoft Visual C++6.0 二、实验设计的相关概念或基本原理 1.移位密码的基本思想: 移位密码算法 c=m+k(mod 26),k可以使0

四、实验总结分析 关键代码 1.加密算法: int encrepty( )//加密 { length=strlen(source); for(i=0; i96&&source[i]<123) source[i] = (source[i]+key-97)%26+65; } cout<

for(i=0; i64&&cipher[i]<91) cipher[i] = (cipher[i]-key-65+26)%26+97; } cout<

实验讲义1

哈尔滨工程大学2009年春 密码学实验讲义 马春光 教 授 哈尔滨工程大学计算机科学与技术学院 武 朋 实验师 哈尔滨工程大学计算机科学与技术学院

前言 密码学(Cryptology)是研究秘密通信的原理和破译秘密信息的方法的一门学科。密码学的基本技术就是对数据进行一组可逆的数学变换,使未授权者不能理解它的真实含义。密码学包括密码编码学(Cryptography)和密码分析学(Cryptanalyst)两个既对立又统一的主要分支学科。研究密码变化的规律并用之于编制密码以保护信息安全的科学,称为密码编码学。研究密码变化的规律并用之于密码以获取信息情报的科学,称为密码分析学,也叫密码破译学。 密码学在信息安全中占有非常重要的地位,能够为信息安全提供关键理论与技术。密码学是一门古老而深奥的学问,按其发展进程,经历了古典密码和现代密码学两个阶段。现代密码学(Modern Cryptology)通常被归类为理论数学的一个分支学科,主要以可靠的数学方法和理论为基础,为保证信息的机密性、完整性、可认证性、可控性、不可抵赖性等提供关键理论与技术。 哈尔滨工程大学已经为计算机科学与技术专业本科生开设了多轮的“密码学”课程,并将依托信息安全专业加大力度进行“密码学”课程建设。考虑到授课对象的计算机学科背景,以及密码学、特别是基本密码算法在信息安全中的应用越来越广泛,设置相应的实验内容变得十分必要。 本讲义为配合“密码学”课程实验而编写,目的是通过编程实践,深入理解理论课中所讲授的基本密码算法,为更深入的密码工程技术应用提供基础。本讲义初步设计了5个实验项目,古典密码算法、对称加密算法DES、Hash算法MD5、公钥密码算法RSA、数字签名算法DSA。通过系统的实验项目训练,选课学生能够使用C语言,对经典密码算法进行软件编码实现。 结合理论教学和实验教学实践,我们将逐步对实验内容和讲义进行完善和扩展,最终形成一本有实用价值的实验教材,欢迎您的任何建议和意见。 马春光 machunguang@https://www.doczj.com/doc/1a13189675.html, 武朋 wupeng@https://www.doczj.com/doc/1a13189675.html,

多表古典密码的乘法加密运算

多表古典密码的乘法加密运算 实验目的: 1. 熟练掌握多表古典密码简单乘法加密算法原理及实现; 2. 掌握多表古典密码简单乘法加密算法的应用; 实验内容: 1、写出多表(双表)古典密码的乘法加密运算的算法、程序设计; 2、输入模q(根据明文确定)及加密密钥k1,k2对下列明文进行加法加密: A graph is finite if both its vertex set and edge set are finite. In this book we study only finite graphs, and so the term ‘graph’ always means ‘finite graph’. (注:标点符号及空格也算一个符号,忽略大小) 3、求出相对应于上述q和k的解密密钥。 实验结果: 1.(1)写出多表古典密码简单乘法加密算法如下: Step1:确定k和q的值; Step2:输入相应的密文; Step3:作变换c=(mi*ki) mod q,字母用ASCII码变为数字后计算; Step4:得到相对应的明文; Step5:逐一输出明文; 程序如下: #include #include #include main() { char M[200]; char C[200]; int K[200],q=26,i,j; srand( (unsigned)time( NULL ) );

for(j=0;j<=200;j++) { K[j]=rand()%50; } printf("please input chars:\n"); gets(M); for(i=0;M[i]!='\0';i++) { if(M[i]>='a'&&M[i]<='z') { C[i]=((M[i]-'a'+1)*K[i])%q+'a'; } else if(M[i]>='A'&&M[i]<='Z') { C[i]=((M[i]-'A'+1)*K[i])%q+'A'; } else C[i]=M[i]; } C[i]='\0'; printf("The result is:\n%s\n",C); getch(); } 2.进行乘法加密后的结果为:

相关主题
文本预览
相关文档 最新文档