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

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

信息安全实习一--古典加密算法

信息安全实习一--古典加密算法

一、实习名称古典加密算法二、实习目的1.熟悉java平台开发环境;2.理解常见古典加密算法:凯撒密码、多字母替代密码、多表替代密码;3.理解古典加密技术中的替换技术、置换技术。

三、实习内容1.[问题描述]凯撒密码是把字母表中的每个字母用该字母后的某个字母进行代替。

凯撒密码的通用加密算法是:C=E(P)=(P+k) mod 26 0<k<26凯撒密码的通用解密算法是:P=D(C)=(P-k) mod 26 0<k<262.[基本要求]实现凯撒密码的加密、解密算法,能够根据用户选择秘钥(移位数)和明文进行加解密。

3.[实现提示](1) 用户可以通过命令实现密钥和明文的选择;(2) 由于字母表中共有26个字符,因此,移位前应先将移动的位数(key)和26取模。

Java 平台中可以实现字符和整数的自动转换,因此将字符加上一个正整数代表在字母表中右移位数。

如果移动的位数为负值,则代表在字母中左移位数。

(3) 尽管移位前已经将移动的位数和26取模,但是通过这种方式实现的右移和左移仍可能发生超界。

因此,移位后仍要判断是否超界。

四、操作过程(1)设计加密解密算法根据通用的的加密解密算法(凯撒密码的通用加密算法是:C=E(P)=(P+k) mod 26 0<k<26;凯撒密码的通用解密算法是:P=D(C)=(P-k) mod 26,0<k<26)推导更为复杂的算法。

第一步首先扩充加密解密的字符表,从26个英文字母扩充到ASC码所有非控制字符。

为了方便加减字符表,设计了WordTable类,该类为KeyTable类的数组集合,储存所有可识别字符,并在此加入了空格符,因此可以识别多个以空格为分隔符的字符串。

第二步扩充了加密解密的起始位,可以将起始位设置为任意数字。

经过两步的算法升级,新的凯撒密码的加密算法是:C=E(P)=(P-s+k) mod l+s;凯撒密码的解密算法是:C=E(P)=(P-s-k) mod l+s,该算法中,s代表起始位,k代表密钥值,l代表字符表的长度,即可识别的字符个数。

实验一 古典密码算法

实验一 古典密码算法

实验一古典密码算法1、目的使学生认识理解古典密码算法:凯撒密码算法,维吉尼亚密码算法。

2、环境PC 1 台、安装软件VC60、JBuilder8、Delphi7。

3、预备知识1.凯撒密码的过程:表1:字母编码表再用配对字母取代信息里的原始字母位移加密法(shift cipher):模数计算。

E k(x)=(x+k)mod 26,D k(y)=(y –k)mod 26如:k=5;“hello world”加密为:mjqqt….2.维吉尼来密码维吉尼来方阵:(不区分大小写)数学表达式:=+C i P i K i[]([][])%26;验证:V[0,0]=0;V[25,25]=24V[13,12]=25解密:[]([][])%26;P i C i K i =-如:k=”BEST ”;“HELLO WORLD ”加密为:IIDE …. 4字符一组: hellOWOR LD BESTBEST BEST以第一行字母为列标,2行为行标(B ,H )=I ; 解密: IIDE BEST ,明文字母是B 行字母为I 的列号H ,或B 列=I 的行H 。

4、方法和步骤(1)请根据算法的描述和你对算法过程的理解,选用一种编程语言C ,C++,Java,Pascal 来实现凯撒算法,用自己学号的最后起之3位数为密钥,加密自己姓名的全拼,将解密,将密文为结果写于实验报告上。

(2)请根据算法的描述和你对算法过程的理解,选用一种编程语言C,C++,Java,Pascal来实现维吉尼亚算法,用“best”为密钥,加密自己姓名的全拼,将解密,将密文为结果写于实验报告上.附参考源程序:Vigenere.cpp.pdf5、注意算法要实现加密过程和解密过程并对正确性设计验证途径。

古典算法加密实验报告

古典算法加密实验报告

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

二、实验内容本次实验主要涉及以下古典加密算法: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和解密函数,成功实现了单表代替密码的加密和解密过程。

古典密码实验报告

古典密码实验报告

哈尔滨工程大学实验报告实验名称:古典密码算法班级:学号:姓名:实验时间:2014年4月成绩:指导教师:实验室名称:哈尔滨工程大学实验室与资产管理处制一、实验名称古典密码算法二、实验目的通过编程实现经典的代替密码算法和置换密码,包括移位密码、维吉尼亚密码、周期置换密码、列置换密码,加深对代替技术的了解,为现代分组密码实验奠定基础。

三、实验环境(实验所使用的器件、仪器设备名称及规格)运行Windows 或Linux 操作系统的PC 机,具有gcc(Linux)、VC(Windows)等C 语言编译环境。

四、实验任务及其要求(1)根据实验原理部分对移位密码的介绍,自己创建明文信息,并选择一个密钥,编写移位密码的实现程序,实现加密和解密操作。

(2)根据实验原理部分对维吉尼亚密码的介绍,自己创建明文信息,并选择一个密钥,编写维吉尼亚密码的实现程序,实现加密和解密操作。

(3)根据实验原理部分对周期置换密码的介绍,自己创建明文信息,并选择一个密钥,编写周期置换密码的实现程序,实现加密和解密操作。

(4)根据实验原理部分对列置换密码的介绍,自己创建明文信息,并选择一个密钥,编写列置换密码的实现程序,实现加密和解密操作。

五、实验设计(包括原理图、真值表、分析及简化过程、卡诺图、源代码等)1.移位密码移位密码(Shift Cipher)是一种典型的单表替代密码,也称为加法密码。

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

相应的,移位密码的解密过程可以表示为:m = (c - k) mod n移位密码的一个典型代表就是凯撒密码(Ceaser Cipher),它是k=3 时的移位密码。

使用英文字母表的撒密码的加(解)密可以表示为:m = (c + 3) mod 26 m = (c - 3) mod 26,例如,明文:attacks at nine am密钥:3加密:将明文分组对每一个密文字母,依英文字母表,用其右的第 3 个字母代替密文:dwwdfnv dw qlqh dp另外,使用凯撒密码加密后的密文“dwwdfnvdwilyhsp”,其明文为“attacks at five pm”。

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

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

凯撒密码映射表
明 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)

实验一古典密码算法

实验一古典密码算法

实验一古典密码加密算法【实验目的】一般的密码学实验要求学习者编写实现加密法或分析工具的程序,但这势必要占用学习者较多的时间去调试程序,减少真正学习密码学的时间。

分析加密程序CAP是一款密码加密与分析的软件,包含了古典密码学和现代密码学常用的密码算法和分析工具。

学习者可以利用CAP更好地学习加密和密码分析技术,而不必花费大量的时间调试程序。

b5E2RGbCAP【实验目的】1、理解代替密码学加密过程;2、掌握置换密码学加密过程;3、自行设计恺撒密码<Caesar Cipher )加密工具,并验证恺撒密码<Caesar Cipher )加密过程;p1EanqFDPw4、掌握经典加密分析软件CAP的使用并验证古典密码加密算法;【实验环境】1、基于Windows的PC机一台;设计设计恺撒密码<Caesar Cipher )加密工具时的软件环境根据学生自己选择的平台安装,本设计软件平台可以是C语言,Visual C++,Visual C#,Visual Basic均可,主要是实现恺撒密码<Caesar Cipher )算法即可。

DXDiTa9E3d2、CAP加密与分析软件【实验内容】1、以C#平台为例说明恺撒密码<Caesar Cipher )算法的实现。

程序主界面如图1所示:程序源码using System。

……(省略部分生成代码>namespace Encryption{publicpartialclassForm1 : Form{int key。

privatestring Encryption(int key,refstringInputString>RTCrpUDGiT{StringBuilder str = newStringBuilder(>。

char ch,chtemp。

int temp。

for(int i=0。

i<InputString.Length。

实验一 古典密码-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加密和解密功能,由于长时间没有进行编程训练,一些以前掌握的编程技巧现在都不熟悉了,作为计算机专业的学生,还是要注意平时的训练,熟能生巧。

信息安全 实验一 古典密码算法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<stdio.h>#include<math.h>#include<string.h>#define N 500int 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;i<m;i++)/*加密的过程*/{n=(int)str1[i];/*将字符转换成ASCII*/if(str1[i]==' ')/*如果字符串中出现空格返回空格*/{printf(" ");str2[i]=str1[i];}else if(n>96&&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)n=26+n;l=(char)(n+97);printf("%c",l);str2[i]=l;}}str2[i]='\0';/*--------------------------------*/printf("\n\nThe C length is %d",strlen(str2));printf("\n\n *\n *\n *\n***\n *\n");printf("When the ciphertext is '%s',\nThe password program is...::\n\n",str2);m=strlen(str2);for(i=0;i<m;i++)/*解密过程*/{n=(int)str2[i];/*将字符转换成ASCII*/if(str2[i]==' ')/*如果是空格,返回的也是空格*/{printf(" ");}else if(n>96&&n<123)/*对小写进行解密*/{n=(n-97-k)%26;if(n<0)n=26+n;l=(char)(n+97);printf("%c",l);}else if(n>64&&n<91)/*对大写进行解密*/{n=(n-65-k)%26;if(n<0)n=26+n;l=(char)(n+97);printf("%c",l);}}str1[i]='\0';getch();return 0;}4.1.4 运行结果4.2 置换密码4.2.1根据实验原理部分对置换密码算法的介绍,自己创建明文信息,并选择一个密钥,编写置换密码算法的实现程序,实现加密和解密操作。

古典密码的实验报告

古典密码的实验报告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算法实验-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)所创造,因此现在被称为“维吉尼亚密码”。

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