文档库 最新最全的文档下载
当前位置:文档库 › 凯撒密码java简单实现

凯撒密码java简单实现

凯撒密码java简单实现
凯撒密码java简单实现

实验报告:凯撒密码算法的实现一、流程图

二、代码

import java.io.*;

import java.util.Scanner;

public class kaisa1{

public static void main(String[] args){

System.out.print("请输入密钥:");

Scanner s=new Scanner(System.in);

int a=s.nextInt();

C(a);

}

public static void C(int n){

try{

char b[];

BufferedReader br2=new BufferedReader(new InputStreamReader(System.in));

System.out.println("请输入一段明文:");

String str2=br2.readLine();

b=str2.toCharArray();

System.out.println("密文为:");

int k=n;

for(int i=0;i

char ch=(char)((b[i]-'a'+k)%26+'a');

System.out.print(ch);

}

System.out.println("密匙K="+k);

}catch(IOException e){

System.out.println(e.getMessage());

}

}

}

三、截图

java凯撒密码实现----完美版

代码: package ning.hao; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Scanner; public class Cryptology { char ciphertext[];//密文 int key; char plaintext[];//明文 StringBuffer plaintextStr; StringBuffer ciphertextStr; final int max=500; Cryptology(){ key=0; plaintextStr=new StringBuffer(""); ciphertextStr=new StringBuffer(""); } int setKey(){ System.out.println("请输入一个Caesar密钥"); Scanner sc=new Scanner(System.in); try{ key=sc.nextInt()%26; } catch(Exception e){ System.out.println("需要输入整数!"); } return key; } void getPlaintext(){//获得明文 plaintext=new char[max]; for(int j=0;j

char ch=' '; BufferedReader bf=new BufferedReader(new InputStreamReader(System.in)); System.out.println("请输入明文"); try { ch=(char) bf.read();//获得字符 while(ch!='\r'&&ch!='\n'){ if(ch>='a'&&ch<='z'||ch>='A'&&ch<='Z'||ch==' '||ch==','||ch=='.'||ch=='!'){ plaintext[i]=ch; i++; } else{ System.out.println("输入不支持!!"); break; } try{ ch=(char) bf.read(); } catch(IOException e1){ } } } catch(IOException e){} } void encryption(){//加密 int temp=0; ciphertext=new char[max]; for(int j=0;j='a'&&plaintext[i]<='z'){ if(temp>122) ciphertext[i]=(char) (97+temp-123); else{

凯撒算法的加密和解密过程 C

加密过程源代码: #include int main() { int key,i,n; char mingma[888],mima[888]; cout<<"王小宁"<>mingma; cout<<"请输入KEY:"<>key; for( i=0;mingma[i]!='\0';i++) { if((mingma[i]>='A')&&(mingma[i]<='Z')) mima[i]='A'+(mingma[i]-'A'+key)%26; if((mingma[i]>='a')&&(mingma[i]<='z')) mima[i]='a'+(mingma[i]-'a'+key)%26; n=i; } cout<<"改密后的密码为:"<

解密过程源代码: #include int main() { int key,i,n; char mingma[888],mima[888]; cout<<"王小宁"<>mima; cout<<"请输入KEY:"<>key; for( i=0;mima[i]!='\0';i++) { if((mima[i]>='A')&&(mima[i]<='Z')) mingma[i]='A'+(mima[i]-'A'+26-key)%26; if((mima[i]>='a')&&(mima[i]<='z')) mingma[i]='a'+(mima[i]-'a'+26-key)%26; n=i; } cout<<"解密后的明码为:"<

凯撒密码

南通大学网络安全实验课 实验报告 学生姓名 所在院系 专业 学号 指导教师 南通大学 2014年 5 月

凯撒密码 一、概念与原理 它是一种代换密码。据说恺撒是率先使用加密函的古代将领之一,因此这种加密方法被称为恺撒密码。 凯撒密码作为一种最为古老的对称加密体制,在古罗马的时候都已经很流行,他的基本思想是:通过把字母移动一定的位数来实现加密和解密。明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推X将变成A,Y变成B,Z变成C。由此可见,位数就是凯撒密码加密和解密的密钥。 如恺撒使用过的偏移量为3的这种密码,若明文为: M=Casesar cipher is a shift substitution 则密文为 C=Fdvhvdu flskhu lv d vkliw vxevwlwxwlrq 二、实验内容与步骤 1、手动完成Caesar密码 (1)在实验原理部分我们已经了解了Caesar密码的基本原理,那么我们先写出当密钥k=3时,对应明文:data security has evolved rapidly的密文。 (2)进入实验平台,单击工具栏中的“密码工具”按钮,启动密码工具,在向导区点击“Caesar密码”。在明文输入区输入明文:data security has evolved rapidly。将密钥k调节到3,查看相应的密文,并与你手动加密的密文进行比较。 请根据密钥验证密文与明文对应关系是否正确。 2、Caesar加密 (1)进入“加密解密”|“Caesar密码”视图,在明文输入区输入明文(明文应为英文),单击“加密”按钮进行加密。 (2)调节密钥k的微调按钮或者对照表的移位按钮,选择合适的密钥k值,并记下该密钥k值用于同组主机的解密。加密工作完成后,单击“导出”按钮将密文默认导出到Caesar 共享文件夹(D:\Work\Encryption\Caesar\)中,默认文件名为Caesar密文.txt。 (3)通知同组主机接收密文,并将密钥k通告给同组主机。 (4)单击“导入”按钮,进入同组主机Work\Encryption\Caesar目录(\\同组主机IP\Work\Encryption\Caesar),打开Caesar密文.txt。 (5)调节密钥k的微调按钮或对照表的移位按钮,将k设为同组主机加密时的密钥k 值,这时解密已经成功。 (6)将解密后的明文与同组主机记录的明文比较,请对比明文是否相同。 3、Caesar密码分析 (1)本机进入“密码工具”|“加密解密”|“Caesar密码”,在明文输入区输入明文(要求明文有一定的意义以便让同组主机分析)。 (2)调节密钥k的微调按钮或者对照表的移位按钮,选择合适的密钥k值完成Caesar 加密,单击“导出”按钮,将密文默认导出到Caesar共享文件夹中。 (3)通告同组主机(不要通告密钥值k)密文已经放在共享文件夹中,让同组主机获

凯撒密码实验

一、实验目的 通过实验熟练掌握凯撒密码算法,学会凯撒密码算法程序设计。 二、实验环境 软件工具: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 #include #include void table(char *keyword) //筛选密钥(去重复去空格) { int i,j,k; for(i=0;*(keyword+i)!='\0';i++) { for(j=i;*(keyword+j)!='\0';j++) { if(i!=j) if(*(keyword+i)==*(keyword+j)||*(keyword+j)==' ') { for(k=j;*(keyword+k)!='\0';k++) *(keyword+k)=*(keyword+k+1); j--; } } } } void newTab(char *keyword) //生成密钥表 { char ch;

信息加密与解密实验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 SR

2.谜语:What do you call a dog at the beach ?(你怎么称呼一只在海滩 上的狗?) 答案(移动4位密码):E LSX HSK 实验三凯撒密码破解: 1.凯撒密码破解 密文:NGBKGMUUJZOSK 实验四用数传递信息的方法破译以下的谜语: 1.谜语:What kind of cookies do birds like?(鸟儿喜欢什么种类的饼干?) 答案:2,7,14,2,14,11,0,19,4 2,7,8,17,15 2.谜语:What always ends everything?(什么总是能终结所有事情?) 答案:19,7,4 11,4,19,19,4,17 四、实验总结 通过上机实践,对所学内容的某个知识点有了更深入的理解,写出一些体会、学习心得,甚至是改进意见。 也可以写对界面设计、算法设计、代码编写、程序调试、程序改进等相关的收获、感悟。 五、附录(源程序清单,包含适当的注释)

加密算法

用C语言实现凯撒加密算法 一、凯撒加密算法的来源与简介 “凯撒密码”据传是古罗马凯撒大帝用来保护重要军情的加密系统。它是一种替代密码,通过将字母按顺序推后起3位起到加密作用,如将字母A换作字母D,将字母B 换作字母E。据说凯撒是率先使用加密函的古代将领之一,因此这种加密方法被称为凯撒密码。 假如有这样一条指令: RETURN TO ROME 用凯撒密码加密后就成为: UHWXUA WR URPH 如果这份指令被敌方截获,也将不会泄密,因为字面上看不出任何意义。 这种加密方法还可以依据移位的不同产生新的变化,如将每个字母左19位,就 产生这样一个明密对照表: 明: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 密:T U V W X Y Z A B C D E F G H I J K L M N O P Q R S 在这个加密表下,明文与密文的对照关系就变成: 明文:THE FAULT, DEAR BRUTUS, LIES NOT IN OUR STARS BU T IN OURSELVES. 密文:MAX YTNEM, WXTK UKNMNL, EBXL GHM BG HNK LMTKL UNM BG HNKLXEOXL. 很明显,这种密码的密度是很低的,只需简单地统计字频就可以破译。于是人们在单一凯撒密码的基础上扩展出多表密码,称为“维吉尼亚”密码。它是由16世纪 法国亨利三世王朝的布莱瑟·维吉尼亚发明的,其特点是将26个凯撒密表合成一个,见下表: 原: 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 A :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 B :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 A C: C D E F G H I J K L M N O P Q R S T U V W X Y Z A B D: D E F G H I J K L M N O P Q R S T U V W X Y Z A B C E: E F G H I J K L M N O P Q R S T U V W X Y Z A B C D F: F G H I J K L M N O P Q R S T U V W X Y Z A B C D E G: G H I J K L M N O P Q R S T U V W X Y Z A B C D E F H: H I J K L M N O P Q R S T U V W X Y Z A B C D E F G I: I J K L M N O P Q R S T U V W X Y Z A B C D E F G H J: J K L M N O P Q R S T U V W X Y Z A B C D E F G H I K: K L M N O P Q R S T U V W X Y Z A B C D E F G H I J L: L M N O P Q R S T U V W X Y Z A B C D E F G H I J K M: M N O P Q R S T U V W X Y Z A B C D E F G H I J K L N: N O P Q R S T U V W X Y Z A B C D E F G H I J K L M

置换密码与凯撒密码加解密程序实现

昆明理工大学城市学院学生实验报告 (2012 —2013 学年第 2 学期) 课程名称:信息安全开课实验室:德信楼308 2013 年5月 8日、5月15日

一、实验目的及内容 学会置换密码、凯撒密码加解密算法的编程实现 二、实验原理及基本技术路线 欲加密的数据称为明文,明文经过某种加密算法后转换成密文,加密算法中使用的参数称之为加密密钥;密文经解密算法作用后形成明文,解密算法也有一个密钥,这两个密钥可以相同也可以不相同。密文在网络传输中可能会被窃听,特别是在无线通信中,所有传输信息是外露的,但是由于窃听者不知道解密的方法,安全可得到相对保护。 密码通信的一条基本原则是,必须假定破译知道通用的加密方法,也就是说加密算法E 是公开的。这种假设是合理的也是必要的,因为事实上任何一种加密算法都不可能做到完全的保密,其次一个加密算法在被公开之后仍要能经得起攻击才能称得上是一个合格的、强壮加密算法。另外只有在对加密算法进行不断的研究、攻击和改进中,密码学才能得到发展。既然加密算法是可能公开的,那么真正的秘密就在于密钥了,也就是说,密钥是必须保密的,它通常是一个字符串,并且可以按需要进行频繁的更换,因此以下将讨论是模型是加密算法是公开的且相对稳定,而作为参数的密钥是保密的,并且是易于更换的。在这里密钥的长度很重要,因为找到了解密密钥也就破译了密码,而密钥长度越长,密钥空间就越大,破译密钥所花的时间就越长,破译的可能性就越小。 从破译者的角度来看,密码分析所面对的问题有三种主要的变型:当仅有密文而无明文时,我们称之为“只有密文”问题;当已有了一批相匹配的明文与密文时,称之为“已知明文”问题;当能够加密自已所选的明文时,称为“选择明文”。从这三种角度来看,如密码系统仅能经得起“只有密文”的攻击还不能算是真正的安全,因为破译者完全可能从统计学的角度与一般的通信规律中猜测出一部分的明文,从而就会拥有一些相匹配的明文与密文,从而全部解密。因此,真安全的密码通信系统应是,即使破译者拥有了一些匹配的明文与密文,也无从破译其它密文。 通常情况下,加密公式C=EK(P)表示明文经加密算法E和加密钥K作用后转换成密文C,并有关系: P=DK(EK(P))。

凯撒密码的加密和解密

关于凯撒密码的实现原理 班级:姓名:学号:指导老师: 一、设计要求说明 1、设计一个凯撒密码的加密和解密的程序,要求输入一段字符和密码,输出相应的密文,完成加密过程; 若输入被加密的密文及解密密钥,能还原出原文,完成解密。 2、语言不限,工具不限,独立完成,参加答辩。 3、严格按照格式的要求完成文档,在第六部分的运行结果分析中,要求抓图说明。 二、基础知识介绍 凯撒密码的历史 凯撒密码(caeser)是罗马扩张时期朱利斯?凯撒(Julius Caesar)创造的,用于加密通过信使传递的作战命令。它将字母表中的字母移动一定位置而实现加密。 古罗马随笔作家修托尼厄斯在他的作品中披露,凯撒常用一种“密表”给他的朋友写信。这里所说的密表,在密码学上称为“凯撒密表”。用现代的眼光看,凯撒密表是一种相当简单的加密变换,就是把明文中的每一个字母用它在字母表上位置后面的第三个字母代替。古罗马文字就是现在所称的拉丁文,其字母就是我们从英语中熟知的那26个拉丁字母。因此,凯撒密表就是用d代a,用e代b,……,用z代w。这些代替规则也可用一张表格来表示,所以叫“密表”。 基本原理 在密码学中存在着各种各样的置换方式,但所有不同的置换方式都包含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为基本字符个数) 对于计算机而言,n可取256或128,m、k、c均为一个8bit的二进制数。显然,这种加密算法极不安全,即使采用穷举法,最多也只要255次即可破译。当然,究其本身而言,仍然是一个单表置换,因此,频率分析法对其仍是有效的。 加密解密算法 恺撒密码的替换方法是通过排列明文和密文字母表,密文字母表示通过将明文字母表向左或向右移动一个固定数目的位置。例如,当偏移量是左移3的时候(解密时的密钥就是3): 明文字母表:ABCDEFGHIJKLMNOPQRSTUVWXYZ 密文字母表:DEFGHIJKLMNOPQRSTUVWXYZABC 使用时,加密者查找明文字母表中需要加密的消息中的每一个字母所在位置,并且写下密文字母表中对应的字母。需要解密的人则根据事先已知的密钥反过来操作,得到原来的明文。例如: 明文:THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG 密文:WKH TXLFN EURZQ IRA MXPSV RYHU WKH ODCB GRJ 恺撒密码的加密、解密方法还能够通过同余数的数学方法进行计算。首先将字母用数字代替,A=0,B=1,...,Z=25。此时偏移量为n的加密方法即为:

java凯撒密码课程设计论文

攀枝花学院课程设计 题目: 院(系): 年级专业: 姓名: 学号: 指导教师: 二〇XX年XX月XX日 攀枝花学院教务处制

攀枝花学院本科学生课程设计任务书

摘要 计算机与网络技术的发展将人类带入信息化社会,随之而来的是倍受关注的信息安全问题。现代密码学已成为信息安全技术的核心技术。加解密算法,成为重要的信息安全防护技术,正是现代密码学的主要应用研究成果。 其中,凯撒密码作为一种最为古老的对称加密体制,他的基本思想是:通过把字母移动一定的位数来实现加密和解密。凯撒密码加解密是一种典型的对称加密算法,就是加密密钥能够从解密密钥中推算出来,反过来也成立。大多数对称算法中,加、解密的密钥是相同的,这些算法也称为秘密密钥算法或单密钥算法。它要求发送者和接收者在安全通信之前,商定一个密钥。在加解密时密钥的保护尤为重要,如果第三方知道就会造成信息失窃,所以,在算法设计时要做详细的分析。此外,文章中还说明了凯撒密码产生的背景,如何完成加解密,并分析了凯撒密码加解密的优缺点。 关键词:凯撒密码,文件加密,防护技术

1前言 1.1背景 由于信息的安全保护问题已经显得十分突出,信息保护的现实需要,使得数据加密算法和技术迅速进入了现代社会,了解并有效使用数据加密算法技术已成为计算机技术和通信领域的专业技术人员和广大用户的迫切需求,这是信息化社会发展阶段的重要标志,数据库加密也是信息安全必不可少的安全手段。而密码则可以有效而且可行的保护信息安全的办法,有效是指密码能够做到使信息不被非法窃取,不被篡改或破坏,可行是说它需要付出的代价是可以接受的。如今数据的加密解密技术已随着计算机技术的迅猛发展,由早期的军事和外交领域,逐步伸展到交通、工业经济、科学技术、社会安全和公共生活的各个领域,成为现代社会中保护信息的重要手段和工具。因此密码学的研究就成为一个重要的来解决信息安全问题的一种手段了,而且有着重要的地位。 在信息时代,信息可以帮助团体或个人,使他们受益,同样,信息也可以用来对他们构成威胁,造成破坏。在竞争激烈的大公司中,工业间谍经常会获取对方的情报。密码技术是保护信息安全的主要手段之一。密码技术世界和数学,计算机科学,电子与通信等诸多学科于一身的交叉学科。他不仅具有信息加密功能,而且具有数字签名,身份验证,秘密分存,系统安全等功能。所以使用密码技术不仅可以保证信息的机密性,而且可以保证信息的完整信和正确性,防止信息被篡改,伪造或假冒。随着我国愈来愈现代化,使用密码的频率会愈来愈多,这就促使了数据加密技术的发展。 1.2开发工具 此次课程设计采用的开发环境是JRE,所选用的开发语言是java。这种开发工具和开发语言都是当今比较流行的。 Eclipse 是一个十分优秀的用于开发Java,,Eclipse的功能非常强大,支持也十分广泛,尤其是对各种开元产品的支持十分不错。Eclipse目前支持Java Servlet,AJAX, JSP, JSF, Struts,Spring, Hibernate,EJB3,JDBC数据库链接工具等多项功能。可以说Eclipse几乎囊括了目前所有主流开元产品的专属eclipse开发工具。

恺撒密码实验报告

实验二恺撒密码 一、实验目的 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 {

凯撒密码加密算法

package com.caesar; public class Crypto { // 初始化一个26*26的char类型数组,存放密码原本 public char[][] crypto = new char[26][26]; // 初始化crypto和计算原始message各个字符的位置的初始信息。 public char[] initWord = new char[] { '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' }; public static void main(String[] args) { // 初始换偏移量,最大值不能大于25(可以自定义修改) int[] offsets = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 }; Crypto c = new Crypto(offsets); String message = "I have lots of swag"; String res1 = c.encrypt(message, 5); String res2 = c.doubleEncrypt(message, 5); System.out.println("加密前的字符串:"+message); System.out.println("行加密后的字符串:"+res1); System.out.println("列加密后的字符串:"+res2); } // 构造方法初始化密码原本,对crypto赋值,offsets数组是指在初始化时每行的偏移量public Crypto(int[] offsets) { // 第一种初始化方式,利用unicode编码转换,A-Z对应数字65-90 // 外层循环,表示数组行数 for (int row = 0; row < 26; row++) { // 每一行的偏移量 int offset = offsets[row]; for (int col = 0; col < 26; col++) { int c = 65 + offset + col; // 如果大于90,说明超出Z的范围,应从A在开始 if (c > 90) { c = c - 90 + 64; } crypto[row][col] = (char) (c); } } // 第二种初始化方法,利用initWord进行初始化

密码学实验之凯撒密码和维吉尼亚密码的加解密

1.凯撒密码的加解密 源代码: #include #include #include int main() { char s[100],c; int i,p,d,e; printf("请选择: A.加密B.解密Q.退出\n"); scanf("%c",&c); if(c=='a'||c=='A') { printf("输入明文:"); scanf("%s",&s); p=strlen(s); printf("请设置偏移量:"); scanf("%d",&d); for(i=0;i='a' && s[i]<='z') s[i]=(s[i]-'a'+d)%26+'a'; else if(s[i]>='A' && s[i]<='Z') s[i]=(s[i]-'A'+d)%26+'A'; else s[i]=s[i]+d; } printf("%s",s); printf("\n\n\n"); } if(c=='b'||c=='B') { printf("请输入密文:"); scanf("%s",&s); p=strlen(s); printf("请输入加密的偏移变量:"); scanf("%d",&d); for(i=0;i='a' && s[i]<='z') { e=s[i]-'a'-d;

if(e<=0) s[i]=(e+26)%26+'a'; else s[i]=e%26+'a'; } else if(s[i]>='A' && s[i]<='Z') { e=s[i]-'A'-d; if(e<0) s[i]=(e+26)%26+'A'; else s[i]=e%26+'A'; } else s[i]=s[i]-d; } printf("%s",s); printf("\n\n"); } if(c=='q'||c=='Q') return 0; return 0; } 运行结果是: 2.维吉尼亚密码的加解密 源代码: #include "stdafx.h"

实验一 凯撒加密解密

计算机安全基础上机实验报告 学院年级 专业班 学生姓名 学生学号

实验一凯撒加密解密 凯撒密码简介:恺撒密码的替换方法是通过排列明文和密文字母表,密文字母表示通过将 明文字母表向左或向右移动一个固定数目的位置。例如,当偏移量是左移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 << " "; } else

凯撒密码 置换密码(1)

凯撒密码 #include #include int main() { char save[10][30]; int a,b,i,j; printf("\n请输入您要加密明文的条数:"); scanf("%d",&a); for(i=0;i='A'&&save[i][j]<='Z')||(save[i][j]>='a'&&save[i][j]<='z')) { save[i][j]+=b; if(((save[i][j]>='A'&&save[i][j]<='Z')||(save[i][j]>='a'&&save[i][j]<='z'))==0) save[i][j]-=26; } } printf("\n输出的密文为:"); puts(save[i]); } return(0); }

置换密码 1.#include 2.#include https://www.wendangku.net/doc/f716035937.html,ing namespace std; 4.void jiami()

5.{ 6.char str[100]; 7.char str1[100]; 8.char a[100]; 9.cout<<"请输入您的密钥:"<

凯撒加密解密实验报告

《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、设计一个文件加密/解密程序,主要功能是支持简单的替换加密/解密,支持凯撒加密法(参见百度百科词条:凯撒加密法https://www.wendangku.net/doc/f716035937.html,/view/4107346.htm)和ROT13加密两种加密方法。 4、设计一个简单的文件压缩/解压缩程序,例如:未压缩前的字符为"aaaccccddddd666666",则压缩以后的字符为:"3a4c5d66"。压缩文件时需要输出压缩比,如20%。 5、设计一个万年历程序。主要功能是能够输出任意年份或月份的日历,程序的输出的月

凯撒密码乘法加解密

乘法加解密程序: #include #include int sa[100]; int G=0; int H=0; char encrypt(char ch,int n)/*加密函数,把字符向右循环移位n*/ {while(ch>='A'&&ch<='Z') { sa[G++]=((ch-'A')*n)/26; return ('A'+((ch-'A')*n)%26); } while(ch>='a'&&ch<='z') { sa[G++]=((ch-'A')*n)/26; return ('a'+((ch-'a')*n)%26); } return ch; } char outcrypt(char ch,int n)/*解密函数*/ { while(ch>='A'&&ch<='Z') { return ((sa[H++]*26+ch-2*'A')/n+'A'); } while(ch>='a'&&ch<='z') { return ((sa[H++]*26+ch-2*'a')/n+'a'); } return ch; } void menu()/*菜单,1.加密*/ { clrscr(); printf("\n========================================================="); printf("\n1.Encrypt the file"); printf("\n2.Outcrypt the file"); printf("\n0.Quit\n"); printf("=========================================================\n"); printf("Please select a item:"); return;

模运算与凯撒密码

模运算 模运算即求余运算。“模”是“Mod”的音译,模运算多应用于程序编写中。 Mod的含义为求余。模运算在数论和程序设计中都有着广泛的应用,从奇偶数的判别到素数的判别,从模幂运算到最大公约数的求法,从孙子问题到凯撒密码问题,无不充斥着模运算的身影。虽然很多数论教材上对模运算都有一定的介绍,但多数都是以纯理论为主,对于模运算在程序设计中的应用涉及不多。 目录 模运算及其性质 1.基本理论 2.基本性质 3.运算规则 基本应用 展开 模运算及其性质 1.基本理论 2.基本性质 3.运算规则 基本应用 展开 例如11 Mod 2,值为1 上述模运算多用于程序编写,举一例来说明模运算的原理: Turbo Pascal对mod的解释是这样的: A Mod B=A-(A div B) * B (div含义为整除)[1] 模运算及其性质 本文以c++语言为载体,对基本的模运算应用进行了分析和程序设计,以理论和实际相结合的方法向大家介绍模运算的基本应用。。 基本理论 基本概念: 给定一个正整数p,任意一个整数n,一定存在等式 n = kp + r ; 其中k、r是整数,且0 ≤ r < p,称呼k为n除以p的商,r为n除以p的余数。

对于正整数p和整数a,b,定义如下运算: 取模运算:a % p(或a mod p),表示a除以p的余数。 模p加法:(a + b) % p ,其结果是a+b算术和除以p的余数,也就是说,(a+b) = kp +r,则(a + b) % p = r。 模p减法:(a-b) % p ,其结果是a-b算术差除以p的余数。 模p乘法:(a * b) % p,其结果是 a * b算术乘法除以p的余数。 说明: 1. 同余式:正整数a,b对p取模,它们的余数相同,记做 a ≡ b % p或者a ≡ b (mod p)。 2. n % p得到结果的正负由被除数n决定,与p无关。例如:7%4 = 3,-7%4 = -3, 7%-4 = 3, -7%-4 = -3。 基本性质 (1)若p|(a-b),则a≡b (% p)。例如11 ≡ 4 (% 7),18 ≡ 4(% 7) (2)(a % p)=(b % p)意味a≡b (% p) (3)对称性:a≡b (% p)等价于b≡a (% p) (4)传递性:若a≡b (% p)且b≡c (% p) ,则a≡c (% p) 运算规则 模运算与基本四则运算有些相似,但是除法例外。其规则如下: (a + b) % p = (a % p + b % p) % p (1) (a - b) % p = (a % p - b % p) % p (2) (a * b) % p = (a % p * b % p) % p (3) (a^b) % p = ((a % p)^b) % p (4) 结合率: ((a+b) % p + c) % p = (a + (b+c) % p) % p (5) ((a*b) % p * c)% p = (a * (b*c) % p) % p (6) 交换率: (a + b) % p = (b+a) % p (7) (a * b) % p = (b * a) % p (8) 分配率: ((a +b)% p * c) % p = ((a * c) % p + (b * c) % p) % p (9) 重要定理:若a≡b (% p),则对于任意的c,都有(a + c) ≡ (b + c) (%p);(10) 若a≡b (% p),则对于任意的c,都有(a * c) ≡ (b * c) (%p);(11)若a≡b (% p),c≡d (% p),则(a + c) ≡ (b + d) (%p),(a - c) ≡ (b - d) (%p), (a * c) ≡ (b * d) (%p),(a / c) ≡ (b / d) (%p);(12) 若a≡b (% p),则对于任意的c,都有ac≡ bc (%p);(13)

相关文档