凯撒密码和playfair密码-实验报告
密码学课程设计报告
![密码学课程设计报告](https://img.taocdn.com/s3/m/ed59745c844769eae009edde.png)
密码学课程设计报告一.古典密码算法 (3)1.1.实验内容 (3)1.2.实验目的 (3)1.3.需求分析 (3)1.4.程序流程图 (4)1.5.算法实现 (5)1.5.1 Playfair体制 (5)1.5.1.1算法描述 (5)1.5.1.2 核心代码解析 (6)1.5.1.3运行结果 (8)1.5.1.4 Playfair安全分析 (8)1.5.2 Vigenere体制 (9)1.5.2.1算法描述 (9)1.5.2.2核心代码解析 (10)1.5.2.3运行结果 (12)1.5.2.4 Vigenere安全分析 (12)1.5.3 Vernam体制 (13)1.5.3.1算法描述 (13)1.5.3.2核心代码解析 (14)1.5.3.3 运行结果 (15)1.5.3.4 Vernam安全分析 (15)二.分组密码算法DES (17)2.1.实验内容 (17)2.2.实验目的 (17)2.3.需求分析 (17)2.4.DES算法描述 (18)2.5 DES算法流程 (20)2.6.DES核心代码分析 (20)2.7.DES运行结果 (24)2.8.DES安全分析 (24)三.大素数密码算法RSA (26)3.1.实验内容 (26)3.2.实验目的 (26)3.3.需求分析 (26)3.4. 程序流程图 (28)3.5. 算法实现 (29)3.5.1 Miller-Rabin素性测试法 (29)3.5.1.1算法描述 (29)3.5.1.2核心代码分析 (30)3.5.1.3运行结果 (31)3.5.1.4 算法效率分析 (31)3.5.2 RSA算法实现 (32)3.5.2.1算法描述 (32)3.5.2.2 核心代码分析 (32)3.5.2.3运行结果 (35)3.5.2.4 RSA安全分析 (35)四.实验总结 (37)一.古典密码算法1.1.实验内容:用高级语言实现古典加密方法,多表古典加密方法主要有Playfair体制、Vigenere体制、Beaufor体制、Vernam体制和Hill体制,其中此实验本人运用了C++实现了Playfair体制、Vigenere体制、Vernam体制这三种多表古典加密方法。
《信息安全》实验报告1 编程实现恺撒密码
![《信息安全》实验报告1 编程实现恺撒密码](https://img.taocdn.com/s3/m/0bb8e887d0d233d4b14e693e.png)
《信息安全》实验报告(1)实验名称:________________ 指导教师:___________ 完成日期:________________ 专 业:________________ 班 级:___________ 姓 名:________________一、实验目的:掌握典型的单表代换和多表代换的加密方法的实现细节。
二、实验内容:1、编程实现凯撒密码的加密和解密。
要求:既可以进行加密转换,也可以进行解密转换。
程序参考界面如右所示。
可以使用任何编程工具,能处理英文即可。
2、(选做)编程实现维吉尼亚密码的加密和解密。
要求:既可以进行加密转换,也可以进行解密转换。
程序参考界面如右所示。
可以使用任何编程工具,能处理英文即可。
三、程序设计说明:(实现步骤、算法设计思路、流程图等)凯撒密码加密算法:#include <stdio.h>int main(){char P[100];/*定义明文长度*/int K=3,i;printf("请输入明文:\n"); /*输入明文*/gets(P); /* 接受明文*/for(i=0;P[i]!='\0';i++) { /*逐个判断字母的大小*/if(P[i]>='a'&&P[i]<='z') /*小写字母 */P[i]=(P[i]-'a'+K)%26+'a';else if(P[i]>='A'&&P[i]<='Z')/*大写字母 */P[i]=(P[i]-'A'+K)%26+'A';else P[i]=' ';/*如果不是字母,转换为空格*/}printf("加密后 :\n%s\n",P);/*输出密文*/getch();return 0;}凯撒密码的实现 于泳海 2014-9-24 信息管理与信息系统 11级信本班 贾文丽四、实验结果与结论:(经调试正确的源程序和程序的运行结果)明文加密(密钥key=3):五、实验总结:(实验中遇到的问题及解决方法,心得体会等)在本次实验中,学会了凯撒密码的加密与解密。
凯撒密码实验报告册(3篇)
![凯撒密码实验报告册(3篇)](https://img.taocdn.com/s3/m/c10120bccf2f0066f5335a8102d276a200296036.png)
第1篇一、实验背景凯撒密码是一种古老的加密技术,由罗马皇帝凯撒发明。
它是一种替换加密,通过将明文字母表中的字母按照一个固定的偏移量进行替换,生成密文。
凯撒密码是最简单、最广为人知的加密技术之一,其加密和解密过程都非常简单。
二、实验目的1. 理解凯撒密码的加密和解密原理;2. 掌握凯撒密码的编程实现;3. 分析凯撒密码的安全性,了解其局限性;4. 比较凯撒密码与其他加密算法的差异。
三、实验环境1. 操作系统:Windows 102. 编程语言:Python3.83. 开发工具:PyCharm四、实验内容1. 凯撒密码加密和解密算法实现2. 凯撒密码安全性分析3. 凯撒密码与其他加密算法的比较五、实验步骤1. 凯撒密码加密和解密算法实现(1)定义凯撒密码加密和解密函数```pythondef caesar_encrypt(text, shift):encrypted_text = ""for char in text:if char.isalpha():shifted = ord(char) + shiftif char.isupper():if shifted > ord('Z'):shifted -= 26elif char.islower():if shifted > ord('z'):shifted -= 26encrypted_text += chr(shifted) else:encrypted_text += charreturn encrypted_textdef caesar_decrypt(text, shift):decrypted_text = ""for char in text:if char.isalpha():shifted = ord(char) - shiftif char.isupper():if shifted < ord('A'):shifted += 26elif char.islower():if shifted < ord('a'):shifted += 26decrypted_text += chr(shifted)else:decrypted_text += charreturn decrypted_text```(2)测试凯撒密码加密和解密函数```pythonif __name__ == "__main__":text = "Hello, World!"shift = 3encrypted_text = caesar_encrypt(text, shift)decrypted_text = caesar_decrypt(encrypted_text, shift)print("Original text:", text)print("Encrypted text:", encrypted_text)print("Decrypted text:", decrypted_text)```2. 凯撒密码安全性分析凯撒密码的安全性非常低,因为其密钥空间只有26个可能的值(即字母表中的字母数量)。
凯撒加密实验报告(3篇)
![凯撒加密实验报告(3篇)](https://img.taocdn.com/s3/m/d1e5124d657d27284b73f242336c1eb91a373382.png)
第1篇一、实验目的通过本次实验,掌握凯撒加密法的原理和步骤,了解其在密码学中的应用,并能够使用Python语言实现凯撒加密和解密功能。
二、实验原理凯撒加密法是一种最简单且最广为人知的替换加密技术。
其基本原理是将明文中的每个字母按照字母表的顺序向后(或向前)移动一个固定数目的位置,从而生成密文。
例如,当偏移量为3时,明文中的A将变成D,B变成E,以此类推。
凯撒加密法的密钥是偏移量,它决定了加密过程中字母的移动方向和距离。
密钥的取值范围是1到25,表示将字母表向后移动1到25个位置。
三、实验内容1. 凯撒加密使用Python语言实现凯撒加密功能,具体步骤如下:- 定义一个函数,接收明文和密钥作为参数。
- 将明文中的每个字母按照字母表的顺序向后移动密钥指定的位置。
- 对于超出字母表范围的字母,将其转换回字母表的首部。
- 返回加密后的密文。
2. 凯撒解密使用Python语言实现凯撒解密功能,具体步骤如下:- 定义一个函数,接收密文和密钥作为参数。
- 将密文中的每个字母按照字母表的顺序向前移动密钥指定的位置。
- 对于超出字母表范围的字母,将其转换回字母表的首部。
- 返回解密后的明文。
3. 实验演示使用实验代码演示凯撒加密和解密过程,包括以下示例:- 示例1:明文为“The quick brown fox jumps over the lazy dog”,密钥为3,加密后的密文为“Wkh txlfn eurzq ira mxpsv ryhu wkh odcb grj”。
- 示例2:密文为“Wkh txlfn eurzq ira mxpsv ryhu wkh odcb grj”,密钥为3,解密后的明文为“The quick brown fox jumps over the lazy dog”。
四、实验结果与分析1. 加密效果通过实验验证,凯撒加密法能够有效地将明文转换为密文,且解密过程也能够将密文恢复为明文。
恺撒密码实验报告
![恺撒密码实验报告](https://img.taocdn.com/s3/m/27ef1619c5da50e2524d7fc5.png)
实验二恺撒密码一、实验目的1. 掌握Java数组的基本操作。
2.掌握String类的生成、访问、修改等基本操作;3.掌握StringBuffer类的生成、访问、修改等基本操作。
4. 掌握 Pattern和Matcher对象的用法,以及正则表达式的应用二、实验要求1.正确地定义数组;2.正确对数组元素进行赋值、排序。
3.正确使用String类的方法;4.正确使用StringBuffer类的方法。
5. 正确书写正则表达式和使用Pattern和Matcher对象三、实验环境1.计算机一台;2.JDK、MyEclipse工具软件。
四、实验内容1.编写Application程序,实现凯撒密码,输入明文自动输出相应的密文。
五、实验步骤1.处理输入,每次读入一行。
2.将该行转换为字符数组,依次处理每个字符,英文字母转换成相应的密文,其他字符(如标点符号)的密文和明文相同。
3. 整体输出该行的密文。
4. 选作:允许用户扩展凯撒密码,指定字符替换的规则,即可以输入密钥六、凯撒密码介绍凯撒密码是一种非常古老的加密方法,相传当年凯撒大地行军打仗时为了保证自己的命令不被敌军知道,就使用这种特殊的方法进行通信,以确保信息传递的安全。
他的原理很简单,说到底就是字母于字母之间的替换。
下面让我们看一个简单的例子:“baidu”用凯撒密码法加密后字符串变为“edlgx”,它的原理是什么呢?把“baidu”中的每一个字母按字母表顺序向后移3位,所得的结果就是刚才我们所看到的密文。
七、实验结果源代码为:package youximima;import java.util.*;public class Mima {/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stub//Scanner s =new Scanner(System.in);System.out.println("凯萨密码!");System.out.println("请输入一串字符!");int k=1;while(k==1){System.out.println("凯撒密码法加密后的字符串为:");Scanner s =new Scanner(System.in);String c=s.nextLine();int i=c.length();if(i<=10){char a[]=c.toCharArray();System.out.println(a);for(int j=0;j<a.length;j++){ if(a[j]>='a'&&a[j]<='z')if(a[j]=='x')a[j]='a';else if(a[j]=='y')a[j]='b';else if(a[j]=='z')a[j]='c';else a[j]+=3;if(a[j]>='A'&&a[j]<='Z')if(a[j]=='X')a[j]='A';else if(a[j]=='Y')a[j]='B';else if(a[j]=='Z')a[j]='C';else a[j]+=3;}System.out.print("原文为:");System.out.println(a);}else System.out.println("密码个数超过限制范围!");System.out.println("需要继续吗? 若继续请按1, 退出按0!");int m=s.nextInt();k=m;}System.out.println("欢迎下次使用!");}}结果为:凯萨密码!请输入一串字符!凯撒密码法加密后的字符串为:alk12@#xzalk12@#xz原文为:don12@#ac需要继续吗? 若继续请按1, 退出按0! 1凯撒密码法加密后的字符串为: sjkfJKJ%^YZ密码个数超过限制范围!需要继续吗? 若继续请按1, 退出按0! 1凯撒密码法加密后的字符串为:SFJ*8^knyzSFJ*8^knyz原文为:VIM*8^nqbc需要继续吗? 若继续请按1, 退出按0! 0欢迎下次使用!。
实验1-1经典密码——凯撒密码
![实验1-1经典密码——凯撒密码](https://img.taocdn.com/s3/m/8f55ca7aae1ffc4ffe4733687e21af45b307fe2e.png)
实验1-1经典密码——凯撒密码上机实验报告⼀、实验⽬的:本次上机实践所涉及并要求掌握的知识点。
1、理解凯撒密码的加密、解密过程⼆、实验环境PC机⼀台三、实验内容实验⼀移动3位的凯撒密码:1.(1)⽤移动3位的凯撒密码加密“keep this secret”(2)⽤移动3位的凯撒密码加密你的某位⽼师的名字2.破译下列谜语的答案。
这些答案是⽤移动3位的凯撒密码来加密的。
(1)谜语:What do you call a sleeping bull?(你怎么称呼⼀只睡着的公⽜?)答案: D EXOOGRCHU(2)谜语:What is the different between a teacher and a train?(⽼师与⽕车的区别是什么?)答案:WKH WHDFKHU VDBV “QR JXP DOORZHG”WKH WUDLQ VDBV “FKHZ FKHZ”实验⼆移动4位的凯撒密码:1.请解密下⾯伊薇写给艾⽐的便条,她使⽤的是移动4位的凯撒密码WSVVC PIX’W YWI GMTLIVW JVSQ RSA SR2.谜语:What do you call a dog at the beach ?(你怎么称呼⼀只在海滩上的狗?)答案(移动4位密码):E LSX HSK实验三凯撒密码破解:1.凯撒密码破解密⽂:NGBKGMUUJZOSK实验四⽤数传递信息的⽅法破译以下的谜语:1.谜语:Where does Thursday come before Wednesday? (哪裡的星期四是⽐星期三还早的?)答案: 8,13,19,7,4,3,8,2,19,8,14,13,0,17,242.谜语:What always ends everything?(什么总是能终结所有事情?)答案:19,7,4 11,4,19,19,4,17 ,6四、实验总结通过上机实践,对所学内容的某个知识点有了更深⼊的理解,写出⼀些体会、学习⼼得,甚⾄是改进意见。
凯撒密码实验报告
![凯撒密码实验报告](https://img.taocdn.com/s3/m/a8e1d50d5f0e7cd18525360f.png)
凯撒密码的实验报告一、实验目的通过实验熟练掌握凯撒密码算法,学会凯撒密码算法程序设计。
二、实验环境软件工具:Visual C++ 6.0操作系统:windows xp三、实验思想在密码学中存在着各种各样的置换方式,但所有不同的置换方式都包含2个相同的元素。
密钥和协议(算法)。
凯撒密码的密钥是3,算法是将普通字母表中的字母用密钥对应的字母替换。
置换加密的优点就在于它易于实施却难于破解. 发送方和接收方很容易事先商量好一个密钥,然后通过密钥从明文中生成密文,即是敌人若获取密文,通过密文直接猜测其代表的意义,在实践中是不可能的。
凯撒密码的加密算法极其简单。
其加密过程如下:在这里,我们做此约定:明文记为m,密文记为c,加密变换记为E(k1,m)(其中k1为密钥),解密变换记为D(k2,m)(k2为解密密钥)(在这里不妨假设k1=k2,记为k)。
凯撒密码的加密过程可记为如下一个变换:c?m+k mod n (其中n为基本字符个数) 同样,解密过程可表示为:m?c+k mod n (其中n为基本字符个数)四、实验数据(源代码)#include<stdio.h>#include<string.h>#include<stdlib.h>void ENC(char str[],int n){char c;int i = 0;while(str[i]){c=str[i];if(c>='a'&&c<='z')if(c+n%26<='z')str[i]=(char)(c+n%26);elsestr[i]=(char)('a'+((n-('z'-c)-1)%26));else if(c>='A'&&c<='Z')if(c+n%26<='Z')str[i]=(char)(c+n%26);elsestr[i]=(char)('A'+((n-('Z'-c)-1)%26));elsestr[i]=c;i++;}printf("\n密文:");puts(str);}void DEC(char str[],int n){char c;int i = 0;while(str[i]){c=str[i];if(c>='a'&&c<='z')if(c-n%26>='a')str[i]=(char)(c-n%26);elsestr[i]=(char)('z'-(n-(c-'a')-1)%26);else if(c>='A'&&c<='Z')if(c-n%26>='A')str[i]=(char)(c-n%26);elsestr[i]=(char)('Z'-(n-(c-'A')-1)%26);elsestr[i]=c;i++;}printf("\n明文:");puts(str);}int main(){int k=0;char str[100]={0};int n=0,i=1;printf("please input strings.\n");gets(str);printf("you input:\n");puts(str);printf("Please input number:\n");scanf("%d",&n);printf("1:Encryption\n");printf("2:Decryption\n");printf("3:EXIT\n");printf("Please choose:\n");scanf("%d",&k);switch(k){case 1:ENC(str,n);case 2:DEC(str,n);case 3:exit(0);}}五、实验结果。
凯撒密码和playfair密码试验报告
![凯撒密码和playfair密码试验报告](https://img.taocdn.com/s3/m/0a458badafaad1f34693daef5ef7ba0d4a736d8b.png)
一.预习准备1.实验目的(1).熟记古典对称密码的概念和特点;(2).理解若干种古典密码体制的原理;(3).掌握维吉尼亚及Playfair密码体制的编程实现。
2,实验环境Widows7操作系统、Microsoft Visual Studio 2010 (选择自己熟悉的编程语言和环境3,实验内容和要求(1)实验内容1.实现维吉尼亚密码体制;2.实现Playfair密码体制。
(2)实验要求1.复习课本/课件相关内容。
2.程序中不能固定密钥词,即用户可自行输入密钥词,然后对输入的明文进行加密,或对输入的密文进行解密二.编程思路(实验原理)维吉尼亚密码原理:引入了 “密钥”的概念,即根据密钥来决定用哪一行的密表来进行替换,以此来Playfair 原理:根据下列规则一次对明文的两个字母加密:(1)、属于相同对中的重复的明文字母将用一个填充字母进行分隔,因此,词 balloon 将被加密为 ba lx lo on 。
(2)、属于该矩阵相同行的明文字母将由其右边的字母替代,而行的最后一个字 母由行的第一个字母代替。
例如,ar 被加密为RM 。
(3)、属于相同列的明文字母将由它下面的字母代替,而列的最后一个字母由列 的第一个字母代替。
例如,mu 被加密为CM 。
(4)、否则,明文的其他字母将由与其同行,且与下一个同列的字母代替。
因此, hs 成为BP ,ea 成为IM (或JM ,这可根据加密者的意愿而定)。
三.实验总结1.实验程序(详细设计)维吉尼亚代码:#include<stdio.h>#include<stdlib.h>#include<string.h>#define N 80 int main(void)char message[N];对抗字频统计。
int n,i;int length;printf("明文:");gets(message);printf("密钥:"); scanf("%d",&n);printf("明文:");puts(message);printf("\n");length=strlen(message);for(i=0;i<length;i++) (if(message[i]>='A' && message[i]<='Z')(message[i]=((message[i]-'A')+n)%26+'A';)else if(message[i]>='a' && message[i]<='z') (message[i]=((message[i]-'a')+n)%26+'a';)else continue;)puts("密文:");puts(message);printf("\n");return 0;)Playfai续码:void encrypt()(int i,k;const int N=100;char letters[26]="ABCDEFGHIKLMNOPQRSTUVWXYZ";//用于填充矩阵int flag[25]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};//字母是否已在矩阵中,与letters数组对应char ch[5][5];〃5X5 矩阵char ch1[N];//密钥char ch2[N];// 明文char ch4;//无关字符int len='a'-'A';8彼<<"输入密钥:”;cin>>ch1;int flg=1;while(flg==1)(for(int 1=0;1<5仃儿口(由1);1++)//把所输入的密钥转化为大写字母(if(ch1[i]>'z'llch1[i]<'a')(cout<<"请重新选择操作:"<<endl;flg=0;break;)elsech1[i]=ch1[i]-len;)if(flg==1){ for(i=0;i<strlen(ch1);i++) {if(ch1[i]=='J')ch1[i]=T;)i=0;int j=0;for(int k=0;k<strlen(ch1);k++){for(int t=0;t<25;t++){if(ch1[k]==letters[t]&&flag[t]==0){ch[i][j]=letters[t];flag[t]=1;if(j<4)j++;else {i++;j=0;})}}for( k=0;k<25;k++){if(flag[k]==0){ch[i][j]=letters[k];flag[k]=1;if(j<4)j++;else{i++;j=0;}}}cout<<”密钥填充后的矩阵为:"<<endl;for(i=0;i<5;i++)for(j=0;j<5;j++)(cout<<ch[i][j];cout<<”";if(j==4)cout<<endl;)cout<<endl;cout<<"请输入明文(请输入英文字符):”;cin>>ch2;馍比<<"输入一个无关字符:”;cin>>ch4;if(ch4>='a')ch4=ch4-len;for(k=0;k<strlen(ch2);k++)//把所输入的明文转化为大写字母(if(ch2[k]>='a')ch2[k]=ch2[k]-len;)for(k=0;k<strlen(ch2);k++)〃把明文中的J都变为I(if(ch2[k]=='J')ch2[k]=T;)〃为明文添加必要的无关字符以防止同一组的两个字符相同for( k=0;k<strlen(ch2);k+=2)(if(ch2[k]==ch2[k+1])(for(int t=strlen(ch2);t>k;t--)ch2[t+1]=ch2[t];ch2[k+1]=ch4;))//若明文有奇数个字符,则添加一个无关字符以凑够偶数个if(strlen(ch2)%2!=0)(ch2[strlen(ch2)+1]=ch2[strlen(ch2)];//字符串结尾赋'\0'ch2[strlen(ch2)]=ch4;//明文串尾插入无关字符)cout<<"经过处理后的明文为:”;for(k=0;k<strlen(ch2);k+=2)cout<<ch2[k]<<ch2[k+1]<<"";cout<<endl;cout<<"其最终长度为:"<<strlen(ch2)<<endl;//////////////////明文输入并整理完毕///////////////////////////////for(k=0;k<strlen(ch2);k+=2)(int m1,m2,n1,n2;for(m1=0;m1<=4;m1++){for(n1=0;n1<=4;n1++)(if(ch2[k]==ch[m1][n1])break;)if(ch2[k]==ch[m1][n1])break;)for(m2=0;m2<=4;m2++){for(n2=0;n2<=4;n2++){if(ch2[k+1]==ch[m2][n2])break;)if(ch2[k+1]==ch[m2][n2])break;)m1=m1%5;m2二m2%5;if(n1>4){n1=n1%5;m1=m1+1;}if(n2>4){n2=n2%5;m2=m2+1;}if(m1==m2){ch2[k]=ch[m1][(n1+1)%5];ch2[k+1]=ch[m2][(n2+1)%5];} else{if(n1==n2){ch2[k]=ch[(m1+1)%5][n1];ch2[k+1]=ch[(m2+1)%5][n2];} else{ch2[k]=ch[m1][n2];ch2[k+1]=ch[m2][n1];}}}cout<<”加密后所得到的密文是:”;for(k=0;k<strlen(ch2);k+=2)cout<<ch2[k]<<ch2[k+1]<<"";cout<<endl;}else break; )}〃解密算法void decrypt()(int i,k;const int N=100;char letters[26]="ABCDEFGHIKLMNOPQRSTUVWXYZ";//用于填充矩阵int flag[25]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};//标记字母是否已在矩阵中,与letters数组对应char ch[5][5];〃5X5 矩阵char ch1[N];//密钥char ch2[N];//密文int len='a'-'A';int flg=1;8彼<<"输入密钥:”;cin>>ch1;while(flg=1){for(int 1=0;1<5仃儿口(由1);1++)//把所输入的密钥转化为大写字母{if(ch1[i]>'z'||ch1[i]<'a'){cout<<"请重新选择操作:"<<endl;flg=0;break;} elsech1[i]=ch1[i]-len;}if(flg==1){ for(i=0;i<strlen(ch1);i++)//把密钥中的J都变为I{if(ch1[i]=='J')ch1[i]='I';}i=0;int j=0;〃把密钥中的字母填入到矩阵中,并把该字母标记为已用for(int k=0;k<strlen(ch1);k++) {for( int t=0;t<25;t++) {if(ch1[k]==letters[t]&&flag[t]==0)(ch[i][j]=letters[t];flag[t]=1;if(j<4)j++;else {i++;j=0;})}}for(匕0火<25太++)//按字母表顺序把未用字母依次填入到矩阵中{if(flag[k]==0){ch[i][j]=letters[k];flag[k]=1;if(j<4)j++;else{i++;j=0;}}}cout<<”密钥填充后的矩阵为:"<<endl;for(i=0;i<5;i++)for(j=0;j<5;j++){cout<<ch[i][j];cout<<”";if(j==4)cout<<endl;}cout<<endl;/////////////////////矩阵生成完毕////////////////////////////int f=0;do{cout<<”请输入密文(英文字符):”;cin>>ch2;for(int k=0;k<strlen(ch2);k++)//把所输入的密文转化为大写字母{ if(ch2[k]>='a')ch2[k]=ch2[k]-len;}for( k=0;k<strlen(ch2);k++)//把密文中的J都变为I{if(ch2[k]='J')ch2[k]=T;for( k=0;k<strlen(ch2);k+=2)(if(ch2[k]==ch2[k+1])("<<endl;cout<<”同一分组中不能出现相同字符!请重新输入。
凯撒加密解密实验报告
![凯撒加密解密实验报告](https://img.taocdn.com/s3/m/472156858762caaedd33d4a8.png)
《C语言课程设计》任务书所属学期:10-11-2 下达时间:2011年8月28日完成班级: D软件101【设计目的】本课程设计是计算机科学与技术专业重要的实践性环节之一,是在学生学习完《C语言程序设计》课程后进行的一次全面的综合练习。
本课程设计的目的和任务:(1)巩固和加深学生对C语言的基本知识的理解和掌握;(2)掌握C语言编程和程序调试的基本技能;(3)利用C语言进行简单软件设计的基本思路和方法;(4)提高运用C语言解决实际问题的能力;(5)掌握书写程序设计说明文档的能力。
【设计内容与任务】每个学生在教师提供的课程设计题目中任意选择一题,独立完成,题目选定后不可更换。
1、以本班同学的具体数据为背景,设计一个本班同学通讯录。
实现功能:1) 通讯录编辑(添加、删除)。
2) 按不同的项进行查找。
3) 对已存在的通讯录按不同的项排序。
4) 将通讯录写入文件5) 从文件读入通讯录备注:通讯录至少应该有以下数据项:姓名,地址,电话,邮编,E-mail,QQ。
2、设计一个学生成绩排名系统,该系统的主要功能如下:1) 具备对成绩的管理功能(添加、删除、排序)2) 具备对成绩的统计功能(最高分,最低分,平均分,及格率等)3) 具备按学号、姓名、或课程名查询成绩的功能。
备注:成绩记录以下信息:班级,学号,姓名,课程名,成绩(百分制)。
可以用能表示学生成绩的结构体数组存储数据。
3、设计一个文件加密/解密程序,主要功能是支持简单的替换加密/解密,支持凯撒加密法(参见百度百科词条:凯撒加密法/view/4107346.htm)和ROT13加密两种加密方法。
4、设计一个简单的文件压缩/解压缩程序,例如:未压缩前的字符为"aaaccccddddd666666",则压缩以后的字符为:"3a4c5d66"。
压缩文件时需要输出压缩比,如20%。
5、设计一个万年历程序。
主要功能是能够输出任意年份或月份的日历,程序的输出的月历格式与日常生活中使用的月历格式相同,最好能够支持通过命令行参数指定要输出的年份或月份。
实验报告2---古典密码playfair
![实验报告2---古典密码playfair](https://img.taocdn.com/s3/m/088ed6c44028915f804dc2be.png)
3)其次将其他字母按顺序进行输入,注意不能重复在密钥部分中存在的字母。
4)其中在前两部都需进行重复删除操作:
for(j=0;j<i;j++)
if(key[i]==key[j]) break;
5)将密钥钥数组转化为二维数组(利用循环嵌套),并进行输出。
{if(q1==4) q1=-1;
if(q2==4) q2=-1;
cipher[k]=key1[p1][q1+1];
cipher[k+1]=key1[p1][q2+1];}
ⅱ、同一分组在同一列,密文为所在行紧靠明文下方的字母,其中注意第一行看做是最后一行的下方:
if(q1==q2)
{if(p1==4) p1=-1;
要求:上述密码算法的实现程序提供加密接口encrypt( ),程序名为playfair.c
实
验
过
程
1、对playfair体制进行算法分析,需要构造密钥矩阵,且需对明文进行分组处理,然后按照法则进行加密。
2、构造密钥矩阵注意事项以及实现步骤:
1)密钥矩阵是一个5*5矩阵,其中字母“j”看做是“i”。且密钥矩阵是分为两部分:密钥部分,以及其他字母部分。为了方便起见,先将密钥矩阵按照一维数组进行处理,在矩阵元素完全确定后将一维数组转化为二维数组。
④若M1M2,则插入一个字母(如约定为Q)于重复字母之间,并用前述方法处理。
⑤若明文字母数为奇数时,则在明文的末端添加某个事先约定的字母作为填充。
实验环境
运行Windows操作系统的PC机,具有VC++ 6.0或Turbo C语言编译环境
密码学实验-Playfair密码体系
![密码学实验-Playfair密码体系](https://img.taocdn.com/s3/m/494172c108a1284ac8504399.png)
实验报告实验二 Playfair 密码体系实验目的:1.熟悉掌握Playfair 密码体系算法思想;2.掌握Playfair 密码体系算法的实际运用。
实验内容:1、 写出Playfair 密码体系的算法及程序设计;2、 验证例2.1(参考教材P11)的内容。
实验结果:1.(1) 写出Playfair 密码体系的算法如下:Step1:构造字母表{'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'}的一个置换,这里j 当作i ,实际上只有25个字母。
Step2:将上述置换按行排列成一个5×5的矩阵P[5][5],在明文字符串的适当位置插入一些特定的字母,譬如q ,使得明文字母串的长度为偶数,并且将明文字母串按两个字母一组进行分组,每组中的两个字母不同。
Step3:,对任意的明文字母对21m m ,设它们对应的密文对为21c c ,方法如下:1)如果两个明文在矩阵P 同一行,则只需在明文所在位置处列标加1并mod 5即可,即(j_1+1%5)2) 如果两个明文在矩阵P 同一列,则只需在明文所在位置处行标加1并mod 5即可,即(i_1+1%5)3)如果两个明文既不在同行也不在同列,则只需两明文所在位置处列标互换,即miwen[i]=fang[i_1][j_2];miwen[i+1]=fang[i_2][j_1];Step4:得到密文后输出即可。
作业1-凯撒密码的加密、解密和破解
![作业1-凯撒密码的加密、解密和破解](https://img.taocdn.com/s3/m/123077042bf90242a8956bec0975f46527d3a739.png)
作业1-凯撒密码的加密、解密和破解光信学院《网络信息安全》实验报告1班级:学号:姓名:实验时间:年月日指导教师:陈顺凡一.实验目的理解网络信息安全的基本原理,掌握基本密码技术的原理及编程能力。
二.实验原理和内容[凯撒介绍]凯撒密码(kaiser)是罗马扩张时期朱利斯"凯撒(Julius Caesar)创造的,用于加密通过信使传递的作战命令。
它将字母表中的字母移动一定位置而实现加密。
[加密原理]凯撒密码的加密算法极其简单。
其加密过程如下:在这里,我们做此约定:明文记为m,密文记为c,加密变换记为E(k1,m)(其中k1为密钥),解密变换记为D(k2,m)(k2为解密密钥)(在这里k1=k2,不妨记为k)。
凯撒密码的加密过程可记为如下一个变换:c≡m+k mod n (其中n为基本字符个数)同样,解密过程可表示为:m≡c-k mod n (其中n为基本字符个数)对于计算机而言,n可取256或128,m、k、c均为一个8bit 的二进制数。
显然,这种加密算法极不安全,即使采用穷举法,最多也只要255次即可破译。
当然,究其本身而言,仍然是一个单表置换,因此,频率分析法对其仍是有效的。
.[破解原理]一篇包含字符的英文文章,其各ASCII码字符出现,都有一定的频率,下面是对Google上随意搜索到的英文文章进行分析的结果,见表:QUOTE:====================================== =========== FileName : 01.txt[1] 32: times:204[2] 101:e times:134[3] 116:t times:91[4] 105:i times:87[5] 111:o times:77[6] 108:l times:75[7] 97:a times:75[8] 110:n times:69[9] 10:times:67[10] 115:s times:63====================================== =========== FileName : php.si.source.txt[1] 32: times:576[2] 101:e times:162[3] 115:s times:153[4] 110:n times:141[5] 114:r times:138[6] 105:i times:135[7] 10:times:134[8] 116:t times:129[9] 42:* times:116[10] 111:o times:103====================================== =========== FileName : work.txt[1] 32: times:51322[2] 101:e times:30657[3] 116:t times:23685[4] 97:a times:19038[5] 111:o times:17886[6] 105:i times:16156[7] 110:n times:15633[8] 114:r times:15317[9] 115:s times:15226[10] 104:h times:12191====================================== =========== FileName : 02.txt[1] 32: times:299[2] 101:e times:217[3] 110:n times:136[4] 105:i times:133[5] 111:o times:124[6] 116:t times:116[7] 97:a times:110[8] 115:s times:98[9] 114:r times:92[10] 108:l times:82====================================== =========== FileName : 03.txt[1] 45:- times:404[2] 32: times:394[3] 101:e times:237[4] 116:t times:196[5] 114:r times:173[6] 97:a times:163[7] 105:i times:161[8] 110:n times:153[9] 111:o times:142[10] 115:s times:129====================================== =========== FileName : 04.txt[1] 32: times:326[2] 101:e times:179[3] 116:t times:106[4] 105:i times:101[5] 111:o times:96[6] 110:n times:94[7] 97:a times:92[8] 115:s times:78[9] 100:d times:61[10] 114:r times:60====================================== =========== FileName : 05.txt[1] 32: times:441[2] 101:e times:191[3] 111:o times:151[4] 116:t times:120[5] 97:a times:112[6] 110:n times:108[7] 105:i times:91[8] 114:r times:84[9] 117:u times:79[10] 115:s times:79有此分析可知,一篇英文文章中,出现较高频率的两个字符是' ' (空格) 和 'e',而且它们的ASCII码分别是32和101,差值是69。
凯撒密码编程实验报告(3篇)
![凯撒密码编程实验报告(3篇)](https://img.taocdn.com/s3/m/cca5e6520a4c2e3f5727a5e9856a561253d3214f.png)
第1篇一、实验目的1. 理解凯撒密码的基本原理和加密解密过程;2. 掌握C语言编程实现凯撒密码;3. 提高编程能力和密码学基础知识。
二、实验环境1. 软件工具:Visual Studio 20192. 操作系统:Windows 10三、实验内容1. 凯撒密码原理介绍凯撒密码是一种最简单的移位密码,通过将字母表中的每个字母向前或向后移动固定数量位置来进行加密和解密。
例如,密钥为3时,A会被加密为D,B会被加密为E,以此类推。
解密过程是将密文中的每个字母向前或向后移动相同的位数,恢复出明文。
2. C语言实现凯撒密码(1)加密函数```cvoid caesar_encrypt(char input, char output, int key) {int i = 0;while (input[i] != '\0') {if (input[i] >= 'A' && input[i] <= 'Z') {output[i] = ((input[i] - 'A' + key) % 26) + 'A';} else if (input[i] >= 'a' && input[i] <= 'z') {output[i] = ((input[i] - 'a' + key) % 26) + 'a';} else {output[i] = input[i];}i++;}output[i] = '\0';}```(2)解密函数```cvoid caesar_decrypt(char input, char output, int key) {int i = 0;while (input[i] != '\0') {if (input[i] >= 'A' && input[i] <= 'Z') {output[i] = ((input[i] - 'A' - key + 26) % 26) + 'A'; } else if (input[i] >= 'a' && input[i] <= 'z') {output[i] = ((input[i] - 'a' - key + 26) % 26) + 'a'; } else {output[i] = input[i];}i++;}output[i] = '\0';}```3. 测试程序```cinclude <stdio.h>include <string.h>void caesar_encrypt(char input, char output, int key) { // 加密函数}void caesar_decrypt(char input, char output, int key) { // 解密函数}int main() {char input[100], output[100];int key;printf("请输入密钥(1-25): ");scanf("%d", &key);printf("请输入明文: ");scanf("%s", input);caesar_encrypt(input, output, key);printf("加密结果: %s\n", output);caesar_decrypt(output, input, key);printf("解密结果: %s\n", input);return 0;}```四、实验结果与分析1. 实验结果(1)输入密钥为3,明文为"hello world",加密结果为"kiho world",解密结果为"hello world";(2)输入密钥为5,明文为"goodbye world",加密结果为"jvvhv world",解密结果为"goodbye world"。
加密实验报告
![加密实验报告](https://img.taocdn.com/s3/m/ce1b065e312b3169a451a4cb.png)
实验报告实验课程:信息安全课程实验实验项目:凯撒密码实验时间:系:班级:姓名:学号:指导教师:同组人:实验目的:1. 简单加密方法的原理2. 凯撒密码的原理及程序的编写实验开设方式:个人或分组实验设备与环境:连网的个人计算机Windows 2000 系统平台相关知识点:凯撒密码就是单表代替密码,它的每一个明文字符都由其右边第3个(模26)字符代替(A由D代替,B由E代替,W由Z代替,X由A代替,Y由B代替,Z 由C代替)。
CAESAR密码几种变换:(1)加法变换c≡ (m + k) mod 26其中m是明文对应的数据,c是与明文对应的密文数据,k是加密用的参数,叫密钥。
比如:data security对应数据序列4,1,20,1,19,5,3,21,18,9,20,25,当k=5时,得密文序列9,6,25,6,24,10,8,0,23,14,25,4。
(2)乘同余码:移位或等间隔抽取码,明密文之间没有一一对应关系。
(容易产生多义性)。
变换按照同余乘法进行:加密变换:C=P⨯k (mod 26)解密变换:P=C÷k (mod 26)密钥:k实验内容:1.请同学们采用一种你熟悉的语言编写通过凯撒密码原理实现的加密器。
要求:对文档中的任意几个字符能做正确的加密变换。
加密器做加法变换后仍然可以正确加密。
2.通过凯撒密码的原理实现解密器。
程序如下:#include<stdio.h>#include<math.h>#include<stdlib.h>#include<string.h>#define num 100#define clrscr() system("cls")static int c[100];char einf0(char ch,int key) /*加法加密*/{if(ch>='a'&&ch<='z')ch=(ch+key%26-'a')%26+'a';else if(ch>='A'&&ch<='Z')ch=(ch+key%26-'A')%26+'A';else if(ch>='0'&&ch<='9')ch=(ch+key%10-'0')%10+'0';return ch;}char doutf0(char ch,int key) /*乘法加密*/{if(ch>='a'&&ch<='z')ch=(ch-key%26-'a'+26)%26+'a';else if(ch>='A'&&ch<='Z')ch=(ch-key%26-'A'+26)%26+'A';else if(ch>='0'&&ch<='9')ch=(ch-key%10-'0'+10)%10+'0';return ch;}char einf1(char ch,int key,int c[]) /*加法解密*/{static int i=0;if(ch>='a'&&ch<='z'){c[i++]=(ch-'a')*(key)/26;ch=(ch-'a')*(key)%26+'a';}else if(ch>='A'&&ch<='Z'){c[i++]=(ch-'A')*(key)/26;ch=(ch-'A')*(key)%26+'A';}else if(ch>='0'&&ch<='9'){c[i++]=(ch-'0')*(key)/10;ch=(ch-'0')*(key)%10+'0';}return ch;}char doutf1(char ch,int key,int c[]) /*乘法解密*/{static int j=0;if(ch>='a'&&ch<='z')ch=((ch-'a')+(c[j++])*26)/(key)+'a';else if(ch>='A'&&ch<='Z')ch=((ch-'A')+(c[j++])*26)/(key)+'A';else if(ch>='0'&&ch<='9')ch=((ch-'0')+(c[j++])*10)/(key)+'0';return ch;}void einf_doutf_f(char* inf,int key,char* outf,int flag) /*加法,乘法调用*/ {FILE *in,*out;char ch;clrscr();if((in=fopen(inf,"r"))==NULL){printf("can not open the inf!\n");printf("press any key to exit!\n");exit(0);}if((out=fopen(outf,"w"))==NULL){printf("can not open the outf!\n");printf("press any key to exit!\n");fclose(in);exit(0);}ch=fgetc(in);while(ch!=EOF){if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')||(ch>='0'&&ch<='9')){if(flag==1)fputc(einf0(ch,key),out);if(flag==2)fputc(doutf0(ch,key),out);if(flag==3)fputc(einf1(ch,key,c),out);if(flag==4)fputc(doutf1(ch,key,c),out);}elsefputc(ch,out);ch=fgetc(in);}fclose(in);fclose(out);}int main(){int k;int ch0;char inf[num];char outf[num];int flag;clrscr();while(1){clrscr();printf("\nplease choice the way:1:einf0 2:doutf0 3:einf1 4:doutf1:\n"); scanf("%d",&ch0);if(ch0==1){flag=1;printf("\nplease input the inf:\n");scanf("%s",inf);printf("\nplease input the key:\n");scanf("%d",&k);if(k==0)printf("error");else{printf("\nplease input the outf:\n");scanf("%s",outf);einf_doutf_f(inf,k,outf,flag);printf("\neinf is over!\n");}}else if(ch0==2){flag=2;printf("\nplease input the inf:\n");scanf("%s",inf);printf("\nplease input the key:\n"); scanf("%d",&k);if(k==0)printf("error");else{printf("\nplease input the outf:\n"); scanf("%s",outf);einf_doutf_f(inf,k,outf,flag); printf("\ndinf is over!\n");}}else if(ch0==3){flag=3;printf("\nplease input the inf:\n"); scanf("%s",inf);printf("\nplease input the key:\n"); scanf("%d",&k);if(k==0)printf("error");else{printf("\nplease input the outf:\n"); scanf("%s",outf);einf_doutf_f(inf,k,outf,flag); printf("\ndinf is over!\n");}}else if(ch0==4){flag=4;printf("\nplease input the inf:\n"); scanf("%s",inf);printf("\nplease input the key:\n"); scanf("%d",&k);if(k==0)printf("error");else{printf("\nplease input the outf:\n"); scanf("%s",outf);einf_doutf_f(inf,k,outf,flag);printf("\ndinf is over!\n"); }}else{printf("error!\n"); break;}}printf("\ngame over:\n"); }实验结果:1.原文件:2.加法加密(key=5)3.加法解密4.乘法加密(key=5)5.乘法解密。
凯撒加密解密上机实验报告
![凯撒加密解密上机实验报告](https://img.taocdn.com/s3/m/25f36a35b4daa58da0114aef.png)
计算机安全基础凯撒加密解密上机实验报告学院年级专业班学生姓名学生学号实验一凯撒加密解密凯撒密码简介:恺撒密码的替换方法是通过排列明文和密文字母表,密文字母表示通过将明文字母表向左或向右移动一个固定数目的位置。
例如,当偏移量是左移3的时候(解密时的密钥就是3):明文字母表:ABCDEFGHIJKLMNOPQRSTUVWXYZ 密文字母表:DEFGHIJKLMNOPQRSTUVWXYZABC使用时,加密者查找明文字母表中需要加密的消息中的每一个字母所在位置,并且写下密文字母表中对应的字母。
需要解密的人则根据事先已知的密钥反过来操作,得到原来的明文。
例如:明文:THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG 密文:WKH TXLFN EURZQ IRA MXPSV RYHU WKH ODCB GRJ源代码:#include "kaisa.h"using namespace std;void Kaisa::setI(){cout << "\n请输入加密密码:";cin >> i;}void Kaisa::jiami(){char a, b, c;cout << "\n请输入明文:\t";cin >> a;b = char('z' - i%26);c = char('Z' - i%26);cout << "\n密文是:\t";while(a != '\n'){if((a <= 'z' && a >= 'a') || ( a <= 'Z' && a >='A')){ if((a <= b && a >= 'a') || ( a <= c && a >='A'))cout << char(a + i%26);if(a > c && a <= 'Z')cout << char(a + i%26 - 26);if(a > b && a <= 'z')cout << char(a + i%26 - 26);if(a == ' ')cout << " ";}elsecout << a;a = cin.get();}cout << endl;}void Kaisa::setX(){cout << "\n请输入解密密码:";cin >> i;}void Kaisa::jiemi(){char a, b, c;cout << "\n请输入密文:\t";cin >> a;b = char('a' + i%26);c = char('A' + i%26);cout << "\n明文是:\t";while(a != '\n'){if((a <= 'z' && a >= 'a') || ( a <= 'Z' && a >='A')) { if((a <= 'z' && a >= b) || ( a <= 'Z' && a >= c)) cout << char(a - i%26);if(a >= 'a' && a < b)cout << char(a - i%26 + 26);if(a >= 'A' && a < c)cout << char(a - i%26 + 26);if(a == ' ')cout << " ";}elsecout << a;a = cin.get();}cout << endl;}int main(){while(1){int t;cout << "1.加密" << endl<< "2.解密" << endl<<"按其他键退出"<<endl<< "选择:";cin >> t;Kaisa kaisa;if(t == 1){kaisa.setI();kaisa.jiami();cout<<"加密完成\n"<<endl;}else if(t == 2){kaisa.setX();kaisa.jiemi();cout<<"解密完成\n"<<endl;}elsereturn 0;}}测试:密钥:4,明文:abcdefg 实验结果:实验二DES加密解密加密原理:DES 使用一个56 位的密钥以及附加的8 位奇偶校验位,产生最大64 位的分组大小。
凯撒密码的实验报告
![凯撒密码的实验报告](https://img.taocdn.com/s3/m/b0a8eb85ab00b52acfc789eb172ded630b1c98fb.png)
凯撒密码的实验报告凯撒密码的实验报告引言:密码学作为一门古老而神秘的学科,一直以来都吸引着人们的兴趣。
而凯撒密码作为密码学的基础,其简单而又经典的加密方式,更是备受研究者和爱好者的关注。
本实验旨在通过对凯撒密码的实践应用,深入了解其原理和加密解密过程。
一、凯撒密码的原理凯撒密码,又称移位密码,是一种最早被记录的密码系统。
其基本原理是通过将明文中的每个字母按照一定的规则进行移位,从而得到密文。
在凯撒密码中,移位的规则是将字母按照顺序向后移动固定的位置,例如向后移动3个位置,即A变成D,B变成E,以此类推。
二、实验步骤1. 确定移位规则:在本次实验中,我们选择了向后移动3个位置的规则进行加密和解密。
2. 加密过程:将明文中的每个字母按照移位规则进行替换,得到对应的密文。
例如,明文中的字母A将被替换为D,字母B将被替换为E,以此类推。
3. 解密过程:将密文中的每个字母按照移位规则进行逆向替换,得到对应的明文。
例如,密文中的字母D将被替换为A,字母E将被替换为B,以此类推。
三、实验结果通过对凯撒密码的加密和解密实验,我们得到了以下结果:1. 加密结果:将明文“HELLO WORLD”加密后得到密文“KHOOR ZRUOG”。
2. 解密结果:将密文“KHOOR ZRUOG”解密后得到明文“HELLO WORLD”。
四、实验分析通过对凯撒密码的实验结果进行分析,我们可以得出以下结论:1. 凯撒密码的加密过程是可逆的,即通过解密过程可以还原出原始的明文。
2. 凯撒密码的加密强度较低,容易受到暴力破解的攻击。
因为凯撒密码只有26种可能的移位规则,暴力破解者可以通过尝试每一种规则来解密密文。
3. 凯撒密码的应用范围有限,适用于一些简单的信息加密场景,但在现代密码学中已经不再被广泛使用。
五、实验总结通过本次实验,我们对凯撒密码有了更深入的了解。
凯撒密码作为密码学的基础,为后来的密码学研究奠定了基础。
虽然凯撒密码的加密强度较低,但其简单易懂的原理和操作方式,使其成为初学密码学的入门工具。
恺撒密码的C实现 实验报告
![恺撒密码的C实现 实验报告](https://img.taocdn.com/s3/m/d7d80c42852458fb770b561c.png)
凯撒加密的C实现实验报告1.凯撒密码简介它是一种代换密码。
据说恺撒是率先使用加密函的古代将领之一,因此这种加密方法被称为恺撒密码。
凯撒密码作为一种最为古老的对称加密体制,在古罗马的时候都已经很流行,他的基本思想是:通过把字母移动一定的位数来实现加密和解密。
明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。
例如,当偏移量是3的时候,所有的字母A将被替换成D,B 变成E,以此类推X将变成A,Y变成B,Z变成C。
由此可见,位数就是凯撒密码加密和解密的密钥2.程序的运行1.程序运行2.加密(密钥为2)3.解密程序代码:(具体见附件源程序)1.加密代码void C凯撒Dlg::OnBnClickedOk(){// TODO: 在此添加控件通知处理程序代码UpdateData(1);int i, num;char ch1[100] = {0},ch2[100] = {0};strcpy(ch2,m_mingwen);num = strlen(ch2);for(i=0;i<num;i++){if(ch2[i] >= 'a'&&ch2[i] <= 'z'){if(ch2[i]+m_miyue <= 'z'&&ch2[i] >= 'a'){ch1[i] = ch2[i] + m_miyue;}elsech1[i] = ch2[i] + m_miyue - 25;}if(ch2[i] >= 'A'&&ch2[i] <= 'Z'){if(ch2[i]+m_miyue <= 'Z'&&ch2[i] >= 'A'){ch1[i] = ch2[i] + m_miyue;}elsech1[i] = ch2[i] + m_miyue - 25;}}printf("%s\n",ch1);m_miwen = ch1;UpdateData(0);}2.解密代码void C凯撒Dlg::OnBnClickedButton1(){// TODO: 在此添加控件通知处理程序代码UpdateData(1);int i, num;char ch1[100] = {0},ch2[100] = {0};strcpy(ch2,m_miwen);num = strlen(ch2);for(i=0;i<num;i++){if(ch2[i] >= 'a'&&ch2[i] <= 'z'){if(ch2[i]-m_miyue >= 'a'){ch1[i] = ch2[i] - m_miyue;}elsech1[i] = ch2[i] - m_miyue + 25;}if(ch2[i] >= 'A'&&ch2[i] <= 'Z'){if(ch2[i]-m_miyue >= 'A'){ch1[i] = ch2[i] - m_miyue;}elsech1[i] = ch2[i] - m_miyue + 25;}}printf("%s\n",ch1);m_jiemi = ch1;UpdateData(0);}。
成教实验1-凯撒密码实现
![成教实验1-凯撒密码实现](https://img.taocdn.com/s3/m/179bfe442e3f5727a5e962b3.png)
实验1 凯撒加解密算法实现
实验名称:Linux 操作系统安全
实验类型: 验证性实验
学时:2
适用对象: 信息安全
一. 实验目的
1. 了解凯撒加密、解密过程,掌握其工作原理;
2.编写凯撒加密、解密编码程序
二.实验原理
凯撒加密参考
♦50B.C,Julius Ceasar 使用了一种简单的替换密码- ——后被人称为恺撒密码(Caesar cipher )
♦首先被应用于军事上(cf Gallic Wars)
♦替换方法,每个字母用其后的第三个字母替换
♦Caesar cipher 可以描述如下:
♦Plain: ABCDEFGHIJKLMNOPQRSTUVWXYZ
♦ Cipher: DEFGHIJKLMNOPQRSTUVWXYZABC
♦一般形式,可以把Caesar cipher 中字母移动的位数由3变为1-25中的任何一个三.实验要求
1)分别实现对文字和对文件的加密和解密
2)密钥由用户输入;
总结实验过程:方案、编程、调试、结果、分析、结论。
四.实验环境
Windws9x/NT/2000/XP
编程工具
Java
Visual C++ 6.0
五、实验报告要求
根据上面介绍的实验要求,编程实现,并给出分析报告。
凯撒加密解密上机实验报告
![凯撒加密解密上机实验报告](https://img.taocdn.com/s3/m/25f36a35b4daa58da0114aef.png)
计算机安全基础凯撒加密解密上机实验报告学院年级专业班学生姓名学生学号实验一凯撒加密解密凯撒密码简介:恺撒密码的替换方法是通过排列明文和密文字母表,密文字母表示通过将明文字母表向左或向右移动一个固定数目的位置。
例如,当偏移量是左移3的时候(解密时的密钥就是3):明文字母表:ABCDEFGHIJKLMNOPQRSTUVWXYZ 密文字母表:DEFGHIJKLMNOPQRSTUVWXYZABC使用时,加密者查找明文字母表中需要加密的消息中的每一个字母所在位置,并且写下密文字母表中对应的字母。
需要解密的人则根据事先已知的密钥反过来操作,得到原来的明文。
例如:明文:THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG 密文:WKH TXLFN EURZQ IRA MXPSV RYHU WKH ODCB GRJ源代码:#include "kaisa.h"using namespace std;void Kaisa::setI(){cout << "\n请输入加密密码:";cin >> i;}void Kaisa::jiami(){char a, b, c;cout << "\n请输入明文:\t";cin >> a;b = char('z' - i%26);c = char('Z' - i%26);cout << "\n密文是:\t";while(a != '\n'){if((a <= 'z' && a >= 'a') || ( a <= 'Z' && a >='A')){ if((a <= b && a >= 'a') || ( a <= c && a >='A'))cout << char(a + i%26);if(a > c && a <= 'Z')cout << char(a + i%26 - 26);if(a > b && a <= 'z')cout << char(a + i%26 - 26);if(a == ' ')cout << " ";}elsecout << a;a = cin.get();}cout << endl;}void Kaisa::setX(){cout << "\n请输入解密密码:";cin >> i;}void Kaisa::jiemi(){char a, b, c;cout << "\n请输入密文:\t";cin >> a;b = char('a' + i%26);c = char('A' + i%26);cout << "\n明文是:\t";while(a != '\n'){if((a <= 'z' && a >= 'a') || ( a <= 'Z' && a >='A')) { if((a <= 'z' && a >= b) || ( a <= 'Z' && a >= c)) cout << char(a - i%26);if(a >= 'a' && a < b)cout << char(a - i%26 + 26);if(a >= 'A' && a < c)cout << char(a - i%26 + 26);if(a == ' ')cout << " ";}elsecout << a;a = cin.get();}cout << endl;}int main(){while(1){int t;cout << "1.加密" << endl<< "2.解密" << endl<<"按其他键退出"<<endl<< "选择:";cin >> t;Kaisa kaisa;if(t == 1){kaisa.setI();kaisa.jiami();cout<<"加密完成\n"<<endl;}else if(t == 2){kaisa.setX();kaisa.jiemi();cout<<"解密完成\n"<<endl;}elsereturn 0;}}测试:密钥:4,明文:abcdefg 实验结果:实验二DES加密解密加密原理:DES 使用一个56 位的密钥以及附加的8 位奇偶校验位,产生最大64 位的分组大小。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一.预习准备
1. 实验目的
(1). 熟记古典对称密码的概念和特点;
(2). 理解若干种古典密码体制的原理;
(3). 掌握维吉尼亚及Playfair密码体制的编程实现。
2. 实验环境
Widows7操作系统、Microsoft Visual Studio 2010 (选择自己熟悉的编程语言和环境)
3. 实验内容和要求
(1)实验内容
1.实现维吉尼亚密码体制;
2.实现Playfair密码体制。
(2) 实验要求
1.复习课本/课件相关内容。
2.程序中不能固定密钥词,即用户可自行输入密钥词,然后对输入的明文进行加密,或对输入的密文进行解密
二. 编程思路(实验原理)
维吉尼亚密码原理:
引入了“密钥”的概念,即根据密钥来决定用哪一行的密表来进行替换,以此来
对抗字频统计。
Playfair原理:
根据下列规则一次对明文的两个字母加密:
(1)、属于相同对中的重复的明文字母将用一个填充字母进行分隔,因此,词balloon将被加密为ba lx lo on。
(2)、属于该矩阵相同行的明文字母将由其右边的字母替代,而行的最后一个字母由行的第一个字母代替。
例如,ar被加密为RM。
(3)、属于相同列的明文字母将由它下面的字母代替,而列的最后一个字母由列的第一个字母代替。
例如,mu被加密为CM。
(4)、否则,明文的其他字母将由与其同行,且与下一个同列的字母代替。
因此,hs成为BP,ea成为IM(或JM,这可根据加密者的意愿而定)。
三. 实验总结
1. 实验程序(详细设计)
维吉尼亚代码:
#include<>
#include<>
#include<>
#define N 80
int main(void)
{
char message[N];
int n,i;
int length;
printf("明文:");
gets(message);
printf("密钥:");
scanf("%d",&n);
printf("明文:");
puts(message);
printf("\n");
length=strlen(message);
for(i=0;i<length;i++)
{
if(message[i]>='A' && message[i]<='Z')
{
message[i]=((message[i]-'A')+n)%26+'A';
}
else if(message[i]>='a' && message[i]<='z')
{
message[i]=((message[i]-'a')+n)%26+'a';
}
else continue;
}
puts("密文:");
puts(message);
printf("\n");
return 0;
}
Playfair代码:
void encrypt()
{
int i,k;
const int N=100;
char letters[26]="ABCDEFGHIKLMNOPQRSTUVWXYZ";实验结果运行程序,通过调用函数执行一系列所需要的操作,程序运行正常,截图如下:。