CaesarCipher凯撒密码

news/2024/11/17 0:01:55/

古典密码实验

一、实验目的

(1)理解简单单表代替加密算法的原理;
(2)通过实验,加深对古典密码体制的了解,掌握对字符进行灵活处理的方法;
(3)通过编写一个简单的凯撒(Caesar)密码加密和解密程序,了解加密和解密内部的过程和相关概念,通过编程寻找其解决方案,加深对相关知识点的理解;
(4)通过该实验可以使学生锻炼根据需要选择和使用信息技术工具获取信息的能力,达到课程目标的要求。

二、实验内容及要求

(1)掌握凯撒(Caesar)密码的原理,完成凯撒(Caesar)密码加解密程序的编写;
(2)根据凯撒(Caesar)密码的原理编写程序,对输入的符号串能够根据设置的密钥分别正确实现凯撒加密和解密功能。
(3)针对凯撒密码算法 , 取 密 钥 常 数k=13, 对 明 文M=MEETMEAFTERTOGAPARTY进行第一次加密,求出密文C1。第二次再对C1加密,得到C2。比较C1和C2,如果K不等于13,再比较C1和C2,这说明什么问题?(提示:凯撒密码的明密文字母表的映射公式:A为明文字母表,即英文字母表,B为密文字母表,i,j分别为英文字母表顺序,其映射关系为:j=i+k mod 26,比如当原文为W时,i为23,j为i+k mod 26等于10,所以密文为J)
(4)已知一个凯撒密码的密文如下:ASSHASOTHSFHCUODOFHM,请用穷举法求出明文。

三、实验数据和结果

(1)(2):

CaesarCipher类中的私有属性,代表密钥

private int miYao;public CaesarCipher(int miYao){this.miYao=miYao;}

CaesarCipher类中加密算法

public String jiaMi(String ming){int size=ming.length();char[] mi;mi=ming.toCharArray();for (int i=0;i<size;i++){mi[i]= (char) ((mi[i]-'A'+miYao)%26+'A');}return String.valueOf(mi);}

CaesarCipher类中解密算法

public String jieMi(String mi){int size=mi.length();char[] ming;ming=mi.toCharArray();for (int i=0;i<size;i++){ming[i]= (char) ((ming[i]-'A'+(26-miYao))%26+'A');}return String.valueOf(ming);}

(3)实验代码

CaesarCipher caesarCipher=new CaesarCipher(13);String M="MEETMEAFTERTOGAPARTY";String C1=caesarCipher.jiaMi(M);System.out.println(C1);String C2=caesarCipher.jiaMi(C1);System.out.println(C2);

实验结果(k=13):

jieg

实验结果(k=12):

在这里插入图片描述
观察可得:当k=13并且加密两次就能得到明文。
由此可以得出结论:无论k的值取多少,在加密多次后一定可以得到未加密的明文从而使加密失效(最多为26次),所以凯撒密码是很不安全。

(4)由(3)的结论可知k的值并不重要所以设k=1让其加密26次即可得到明文,代码如下:

CaesarCipher caesarCipher1=new CaesarCipher(1);String A="ASSHASOTHSFHCUODOFHM";for(int i=0;i<26;i++){A=caesarCipher1.jieMi(A);System.out.println(A);}

实验结果:

ZRRGZRNSGREGBTNCNEGL
YQQFYQMRFQDFASMBMDFK
XPPEXPLQEPCEZRLALCEJ
WOODWOKPDOBDYQKZKBDI
VNNCVNJOCNACXPJYJACH
UMMBUMINBMZBWOIXIZBG
TLLATLHMALYAVNHWHYAF
SKKZSKGLZKXZUMGVGXZE
RJJYRJFKYJWYTLFUFWYD
QIIXQIEJXIVXSKETEVXC
PHHWPHDIWHUWRJDSDUWB
OGGVOGCHVGTVQICRCTVA
NFFUNFBGUFSUPHBQBSUZ
//
MEETMEAFTERTOGAPARTY
//
LDDSLDZESDQSNFZOZQSX
KCCRKCYDRCPRMEYNYPRW
JBBQJBXCQBOQLDXMXOQV
IAAPIAWBPANPKCWLWNPU
HZZOHZVAOZMOJBVKVMOT
GYYNGYUZNYLNIAUJULNS
FXXMFXTYMXKMHZTITKMR
EWWLEWSXLWJLGYSHSJLQ
DVVKDVRWKVIKFXRGRIKP
CUUJCUQVJUHJEWQFQHJO
BTTIBTPUITGIDVPEPGIN
ASSHASOTHSFHCUODOFHM

所以其明文为MEET ME AFTER TOGA PARTY

四、实验中遇到的问题及解决(或未解决)的方案

凯撒密码属于替代密码而且是最简单的一种密码,在实验过程中并没有遇到什么问题。


http://www.ppmy.cn/news/789685.html

相关文章

P1827 [USACO3.4] 美国血统 American Heritage 洛谷

题目链接&#xff1a;https://www.luogu.com.cn/problem/P5076、 思路&#xff1a; 递归 &#xff08; 具体以后再补充 &#xff09; 见代码有注释&#xff0c;希望注释有用...... 代码如下&#xff1a; #include<iostream> #include<string>using namespace st…

贵族的种子

北京电影学院赵鹏逍老师语&#xff1a;世上没有天生的“名贵种子”&#xff0c;身为草根又有何惧之有&#xff1f;只要你还没被踩死&#xff0c;早晚有一天&#xff0c;你会发芽&#xff0c;给点阳光你就可以怒放&#xff0c;给点春风你就可以灿烂&#xff0c;当你出落成一株参…

俺们原来都是当贵族培养的

俺们原来都是当贵族培养的 吃着火锅&#xff0c;听着歌&#xff0c;有了以下对话。 李记者&#xff1a;你们当年学过三防么&#xff1f; 我&#xff1a;当然。核化生。核武器爆炸的时候要躲到矮墙下。 李&#xff1a;要一直跑到有蝴蝶什么有昆虫活动的地方。 我&#xff1a;才说…

中国也曾有过贵族:春秋战国是其黄金时期

凤凰网资讯 > 历史 > 世界史 > 正文 中国也曾有过贵族&#xff1a;春秋战国是其黄金时期 2011年04月28日 14:06 来源&#xff1a;文汇读书周报 作者&#xff1a;金波 张宏杰 字号:T|T 326人参与19条评论打印转发 本文摘自《文汇读书周报》2010年3月26日 作者&#xf…

《NFL星计划》:巴尔的摩乌鸦·橄榄1号位

巴尔的摩乌鸦&#xff08;英语&#xff1a;Baltimore Ravens&#xff09;是一支职业美式橄榄球球队位于马里兰州的巴尔的摩。他们现时为美国美式橄榄球联合会的北区进行比赛&#xff0c;其主场为M&T银行体育场。乌鸦队曾在2000年和2012年取得超级碗冠军。 巴尔的摩乌鸦 成…

一图看清《基督山伯爵》人物关系

《基督山伯爵》人物关系图已奉上&#xff0c;请注意查收~ ​图片模糊的话可以点击图片“查看大图”&#xff0c;或者点击下方源文件查看高清大图▼基督山伯爵人物关系图 - 在线模板社区该图为《基督山伯爵》人物关系图&#xff0c;描述了基度山家、弗南家、邓格拉司家、维尔福家…

二叉树——美国血统(洛谷 P1827)

题目选自洛谷P1827 根据前序、中序遍历求出后序遍历&#xff0c;这也是二叉树很重要且基本的知识&#xff0c;还是有必要练练。 至于什么是前、中、后序遍历&#xff0c;这里就不再过多讲述。 用手模拟求解是简单的&#xff0c;接下来看看如何用代码来实现。 基本思路如下&…

【科普】通过西方人的姓名判断血统国籍

http://zhan.renren.com/makehistorylove?gid3602888498034637157&frompost&checkedtrue 1、英格兰人和低地苏格兰人的姓氏中很多含有前缀“-son”&#xff0c;含义是“某人之子”一般翻译成“逊、生、森”&#xff0c;比如爱的生Edison&#xff0c;杰克逊Jackson&am…