信息安全基础实验报告——凯撒密码(java)
信息安全实习一--古典加密算法

一、实习名称古典加密算法二、实习目的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. 凯撒密码的原理及程序的编写【实验设备与环境】(1)计算机(2)TC【实验步骤(内容)】凯撒密码就是单表代替密码,它的每一个明文字符都由其右边第3个(模26)字符代替(A由D代替,B由E代替,W由Z代替,X由A代替,Y由B代替,Z由C代替)。
(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源程序:#include<stdio.h>#include<conio.h>char sumjiami(char ch,int n){n=n%10;while(ch>='A'&&ch<='Z'){return ('A'+(ch-'A'+n)%26);}while(ch>='a'&&ch<='z'){return ('a'+(ch-'a'+n)%26); }while(ch>='0'&&ch<='9'){return ('0'+(ch-'0'+n)%10); }return ch;}char sumjiemi(char ch,int n) {static int k;k=n%10;while(ch>='A'&&ch<='Z'){ n=26-k;return ('A'+(ch-'A'+n)%26); }while(ch>='a'&&ch<='z'){n=26-k;return ('a'+(ch-'a'+n)%26); }while(ch>='0'&&ch<='9'){ n=10-k;return ('0'+(ch-'0'+n)%10); }return ch;char muljiami(char ch,int n) {if(n%2==0) n=n%10+1;else n=n%10;if(n%5==0) n=n+2;else n=n;while(ch>='A'&&ch<='Z'){return ('A'+((ch-'A')*n)%26); }while(ch>='a'&&ch<='z'){return ('a'+((ch-'a')*n)%26); }while(ch>='0'&&ch<='9'){return ('0'+((ch-'0')*n)%10); }return ch;}char muljiemi(char ch,int n) {int i;int k,h;if(n%2==0) n=n%10+1;else n=n%10;if(n%5==0) n=n+2;else n=n;while(ch>='A'&&ch<='Z')for(i=0;i<=n;i++){k=((ch-'A')+i*26)%n; if(k==0)h=((ch-'A')+i*26)/n; if(h>=0&&h<=26)return ('A'+h);}}while(ch>='a'&&ch<='z') {for(i=0;i<=n;i++){k=((ch-'a')+i*26)%n; if(k==0)h=((ch-'a')+i*26)/n; if(h>=0&&h<=26)return ('a'+h);}}while(ch>='0'&&ch<='9') {for(i=0;i<=n;i++){k=((ch-'0')+i*10)%n; if(k==0)h=((ch-'0')+i*10)/n;return ('0'+h);}}return ch;}void menu(){printf("\n========================================================="); printf("\n1.sumjiami the file");printf("\n2.muljiami the file");printf("\n3.sumjiemi the file");printf("\n4.muljiemi the file");printf("\n5.Quit\n");printf("=========================================================\n"); printf("Please select a item:");return;}void main(){int i,n;char ch0,ch1;FILE *in,*out;char infile[20],outfile[20];sleep(3);menu();ch0=getch();{if(ch0=='1'){clrscr();printf("\nPlease input the infile:"); scanf("%s",infile);if((in=fopen(infile,"r"))==NULL){printf("Can not open the infile!\n"); printf("Press any key to exit!\n");getch();exit(0);}printf("Please input the key:");scanf("%d",&n);printf("Please input the outfile:");scanf("%s",outfile);if((out=fopen(outfile,"w"))==NULL){printf("Can not open the outfile!\n"); printf("Press any key to exit!\n");fclose(in);getch();exit(0);}while(!feof(in)){fputc(sumjiami(fgetc(in),n),out);}fclose(in);fclose(out);sleep(1);}if(ch0=='2'){clrscr();printf("\nPlease input the infile:"); scanf("%s",infile);if((in=fopen(infile,"r"))==NULL){printf("Can not open the infile!\n"); printf("Press any key to exit!\n");getch();exit(0);}printf("Please input the key:");scanf("%d",&n);printf("Please input the outfile:");scanf("%s",outfile);if((out=fopen(outfile,"w"))==NULL){printf("Can not open the outfile!\n"); printf("Press any key to exit!\n");fclose(in);getch();exit(0);}while(!feof(in))fputc(muljiami(fgetc(in),n),out);}printf("\nmuljiami is over!\n");fclose(in);fclose(out);sleep(1);}if(ch0=='3'){clrscr();printf("\nPlease input the infile:"); scanf("%s",infile);if((in=fopen(infile,"r"))==NULL){printf("Can not open the infile!\n"); printf("Press any key to exit!\n");getch();exit(0);}printf("Please input the key:");scanf("%d",&n);printf("Please input the outfile:");scanf("%s",outfile);if((out=fopen(outfile,"w"))==NULL){printf("Can not open the outfile!\n"); printf("Press any key to exit!\n");fclose(in);getch();}while(!feof(in)){fputc(sumjiemi(fgetc(in),n),out);}printf("\nsumjiemi is over!\n");fclose(in);fclose(out);sleep(1);}if(ch0=='4'){clrscr();printf("\nPlease input the infile:"); scanf("%s",infile);if((in=fopen(infile,"r"))==NULL){printf("Can not open the infile!\n"); printf("Press any key to exit!\n");getch();exit(0);}printf("Please input the key:");scanf("%d",&n);printf("Please input the outfile:");scanf("%s",outfile);if((out=fopen(outfile,"w"))==NULL){printf("Can not open the outfile!\n");fclose(in);getch();exit(0);}while(!feof(in)){fputc(muljiemi(fgetc(in),n),out);}printf("\nmuljiemi is over!\n");fclose(in);fclose(out);sleep(1);}menu();ch0=getch();}clrscr();printf("\nGood Bye!\n");sleep(3);}运行:在C盘建立1.txt和2.txt,在文本1中输入以下信息:大写:ABCDEFGHIJKLMNOPKRSTUVWXYZ;小写:abcdefghijklmnopkrstuvwxyz;数字:0123456789.1、加法(sum)加密选择1加密运行结果:大写:FGHIJKLMNOPQRSTUPWXYZABCDE; 小写:fghijklmnopqrstupwxyzabcde;数字:5678901234.2、加法(sum)解密选择3加法解密运行结果:大写:ABCDEFGHIJKLMNOPKRSTUVWXYZ; 小写:abcdefghijklmnopkrstuvwxyz;数字:0123456789.3、乘法(mul)加密选择2乘法加密运行结果:大写:AHOVCJQXELSZGNUBSPWDKRYFMT; 小写:ahovcjqxelszgnubspwdkryfmt;数字:0741852963.4、乘法解密选择4乘法解密运行结果:大写:ABCDEFGHIJKLMNOPKRSTUVWXYZ;小写:abcdefghijklmnopkrstuvwxyz;数字:0123456789.5选择5退出。
凯撒密码实验报告册(3篇)

第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个可能的值(即字母表中的字母数量)。
实验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四、实验总结通过上机实践,对所学内容的某个知识点有了更深入的理解,写出一些体会、学习心得,甚至是改进意见。
凯撒加密实验报告(3篇)

第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. 加密效果通过实验验证,凯撒加密法能够有效地将明文转换为密文,且解密过程也能够将密文恢复为明文。
古典密码的实验报告

古典密码的实验报告古典密码的实验报告引言:密码学作为一门古老而又神秘的学科,一直以来都吸引着人们的兴趣。
在古代,人们用各种各样的密码来保护重要信息的安全性。
本实验旨在通过实际操作,探索古典密码的加密原理和破解方法,从而深入了解密码学的基本概念和应用。
一、凯撒密码凯撒密码,又称移位密码,是最简单的一种古典密码。
其原理是通过将明文中的每个字母按照一定的规则进行移位,得到密文。
在本实验中,我们选择了一个简单的凯撒密码进行破解。
首先,我们选择了一段明文:“HELLO WORLD”,并将其按照凯撒密码的规则进行移位,假设移位数为3,则得到密文:“KHOOR ZRUOG”。
接下来,我们尝试使用暴力破解的方法来还原明文。
通过尝试不同的移位数,我们发现当移位数为3时,得到的明文与原文完全一致。
这表明我们成功地破解了凯撒密码,并还原了原始的明文。
二、维吉尼亚密码维吉尼亚密码是一种基于多个凯撒密码组合而成的密码算法。
其原理是通过使用不同的移位数对明文进行加密,从而增加了密码的复杂度。
在本实验中,我们选择了一段明文:“CRYPTOGRAPHY”,并使用维吉尼亚密码进行加密。
我们选择了一个关键词“KEY”作为加密密钥。
首先,我们将关键词“KEY”重复至与明文长度相同,得到“KEYKEYKEYKEYK”。
然后,将明文中的每个字母与关键词中对应位置的字母进行凯撒密码的移位操作。
经过加密后,我们得到了密文:“LXFOPVEFRNHR”。
接下来,我们尝试使用破解方法来还原明文。
通过尝试不同的关键词和移位数的组合,我们发现当关键词为“KEY”且移位数为3时,得到的明文与原文完全一致。
这表明我们成功地破解了维吉尼亚密码,并还原了原始的明文。
三、栅栏密码栅栏密码是一种基于换位操作的密码算法。
其原理是通过将明文中的字母按照一定的规则进行重新排列,得到密文。
在本实验中,我们选择了一段明文:“HELLO WORLD”,并使用栅栏密码进行加密。
java课程设计凯撒加密解密

java课程设计凯撒加密解密一、教学目标本章节的教学目标旨在让学生掌握Java语言实现凯撒加密和解密的方法。
通过本章节的学习,学生应达到以下目标:1.知识目标:了解凯撒加密和解密的基本原理;掌握Java语言的基本语法和编程技巧;理解循环、条件语句在程序中的应用。
2.技能目标:能够使用Java语言编写简单的凯撒加密和解密程序;能够分析并解决程序中的错误和问题;能够协作完成编程任务,提高团队协作能力。
3.情感态度价值观目标:培养对计算机科学的兴趣和好奇心;培养学生的创新精神和实践能力;培养学生的团队合作意识和沟通能力。
二、教学内容本章节的教学内容主要包括以下几个部分:1.凯撒加密和解密的基本原理;2.Java语言的基本语法和编程技巧;3.循环、条件语句在程序中的应用;4.凯撒加密和解密程序的编写与调试。
第1课时:凯撒加密和解密的基本原理;第2课时:Java语言的基本语法和编程技巧;第3课时:循环、条件语句在程序中的应用;第4课时:凯撒加密和解密程序的编写与调试。
为了提高教学效果,本章节将采用以下教学方法:1.讲授法:讲解凯撒加密和解密的基本原理,以及Java语言的基本语法和编程技巧;2.案例分析法:分析典型的凯撒加密和解密案例,引导学生理解并掌握相关知识;3.实验法:让学生动手编写凯撒加密和解密程序,培养学生的实践能力;4.讨论法:学生进行小组讨论,分享编程心得,提高学生的团队协作能力。
四、教学资源为了支持教学内容和教学方法的实施,本章节将准备以下教学资源:1.教材:Java编程入门教程;2.参考书:Java语言程序设计;3.多媒体资料:凯撒加密和解密的案例视频;4.实验设备:计算机、网络环境。
五、教学评估本章节的教学评估将采用多元化的评价方式,以全面、客观地评价学生的学习成果。
评估内容包括:1.平时表现:通过课堂参与、提问、回答问题等环节,评估学生的学习态度和积极性;2.作业:布置相关的编程作业,评估学生的理解和应用能力;3.实验报告:评估学生在实验过程中的操作能力和解决问题的能力;4.考试:设置期末考试,检验学生对凯撒加密和解密知识的掌握程度。
凯撒密码(Java)

凯撒密码(Java)事实上就是把每个字母偏移⼀下⽽已,并且字符不限于a-zA-z,可以是别的,那就很显⽽易见了,代码如下:定义⼀个Caesar密码类,成员变量只有密钥,也就是偏移量key代码如下:public class CaesarCrypto {private int key;public CaesarCrypto(int key) {// TODO Auto-generated constructor stubthis.key = key;}public String getCipher(String plain) {char[] cipherChars = plain.toCharArray();for (int i = 0; i < cipherChars.length; i++) {cipherChars[i] = (char) (cipherChars[i] + this.key);}return new String(cipherChars);}public String getPlain(String cipher) {char[] cipherChars = cipher.toCharArray();for (int i = 0; i < cipherChars.length; i++) {cipherChars[i] = (char) (cipherChars[i] - this.key);}return new String(cipherChars);}public static void main(String[] args) {String text = "Java is the best language in the world!";System.out.println("明⽂:" + text);CaesarCrypto cc = new CaesarCrypto(4);String cipher = cc.getCipher(text);System.out.println("密⽂:" + cipher);System.out.println("解密" + cc.getPlain(cipher));}}结果如下:明⽂:Java is the best language in the world!密⽂:Neze$mw$xli$fiwx$perkyeki$mr$xli${svph%解密Java is the best language in the world!。