-->
当前位置:首页 > 题库 > 正文内容

主观题:令人抓狂的密文

Luz2年前 (2022-12-12)题库1935
也许你看过电影《无间道》,刘建明作为黑帮的卧底在一次行动中发现了警察的卧底陈永仁与黄警督通过摩斯电码进行通讯,经过紧急的群发区域短信 “有内鬼,终止交易”避免了黑帮头目被抓。

![大作业1.png](~/1c71d44b-c701-4817-aa52-1da7d77cab6e.png)

其实不是的,在电影中陈永仁的窗外是有信号传输装置的。

![大作业2.png](~/efaad2a2-130a-4a21-8530-19be4163aaca.png)

要想实现如此流畅的通讯,两人必须对摩斯电码表和通讯非常的熟悉,而且手速要快。
2019年7月5日,某高校官网发布了一串经过3层古典加密的密文(古典加密技术(代替和置换)都使用了),内容如下:
***./-.--/--../.--./.---/..../-/.--/-/***
官方说只要破译了这个密码,就会拿到学校给予的神秘大礼。很多学生参与其中,发誓要解出该段密文并拿到神秘礼物。但由于能够参考的信息太少,没人能正确解出正确的信息。
有一学生对这段密文思考了很久,仍然不能将其解开,无奈在百度贴吧的“密码学吧”发起了名为《求救,我已经快想爆了》的贴子,请求吧友帮助破译这段摩斯电码。通过各路大神的集体智慧,答案终于水落石出。
让我们通过这个故事,并从中一起来学习密码学相关知识,感受下密码学的魅力!
我们来了解一下高手们是如何解密这个密文的吧。
1、从密文可以看出这个是应该经过摩斯电码编码后的结果。
摩斯电码(Morse alphabet)(又译为摩尔斯电码)是一种时通时断的信号代码的摩斯密码翻译器,这种信号代码通过不同的排列顺序来表达不同的英文字母、数字和标点符号等组成了摩斯密码翻译器。摩斯电码由美国人摩尔斯(Samuel Finley Breese Morse)于1837年发明,为摩尔斯电报机的发明(1835年)提供了条件。摩斯电码加密的字符只有字符,数字,标点,不区分大小写。(编码规则等详细资料可参见百度百科)
长、短、分隔符分别为(-、.、/),于是经过反编码后得到所对应的密文为:
**EYZPJHTWT**
2、高手们觉得既然第一层加密为摩斯编码,那一定还有两层加密,而且也用了两大古典加密技术(代替、置换)。分析所有信息觉得消息发布的日期很有可能是密钥,这样密钥就有3个,分别为(2019,7和5),那应该是有一个加密算法使用了密钥对(两个密钥),这样可以推测加密算法有可能是仿射加密。
注:仿射密码(Affine cipher)是一种单表替换密码,通过对字母数值进行简单的乘法和加法方程运算,而得到另一个与其对应的字母,从而进行加密; 仿射加密函数:F(x) = (ax + b) (mod m),其中a和b互质,m是字母的数量; 仿射解密函数:F(x) = a-1(x - b) (mod m),其中a-1是a在Zm群的乘法逆元,m是字母的数量。(关于仿射密码的详细资料可参见百度百科)
猜测加密的算法是:C=(7*P+5) mod 26。(C表示的是密文,P表示的是明文),这样可以求得解密算法是P=(15*C+3) mod 26。解密后得到结果为:
**LZOUIECVC**
3、那么2019就很有可能是简单列置换的加密密钥。
注:简单列置换的加密算法如下图所示(将明文按照密钥的长度一行一行地写成一个矩阵,然后按照密钥对应的数值从小到大,按照列读出即为密文)。

![大作业3.png](~/7caf865b-d508-4d90-9a26-d5a92ed62666.png)

解密后得到的明文为:
# I LOVE ZUCC
# 输入描述:
输入中将有密文和密钥。最开始输入部分包含一串摩斯电码(长度不定,分隔符为/);
后面输入的是仿射密码的加密密钥;
最后输入的是列置换加密的密钥。
# 输出描述:
输出为:明文消息。
补充说明(以下是对程序编码的评分):
# 说明1、输入密文,系统能判定密文是否是正确的摩斯电码,如不正确,则输出错误信息(正确完成此功能可得编码部分10%得分);
例:
输入:
请输入摩斯电码:B/-.--/--../.--./.---/..../-/.--/-/
输出:
错误的摩斯电码。

# 说明2、输入仿射加密密钥(仿射加密算法:y=ax+b,需要输入密钥对a和b,其中a必须要和26互素),如不正确,则输出错误信息(正确完成说明1,2可得编码部分20%得分);
例:
输入:
请输入仿射加密密钥:13 9
输出:
输入密钥错误,13与26不是互素。
# 说明3、学生只能完成摩斯电码的译码过程,但不能完成全部解密功能(正确完成说明1,2,3可得编码部分60%得分);

#说明4、学生正确完成所有译码过程(正确完成所有可得编码部分100%得分,仿射解密与简单列置换解密各占20%)。
例:
输入:
请输入摩斯电码:./-.--/--../.--./.---/..../-/.--/-/
请输入仿射加密密钥:7 5
请输入列置换加密密钥:2019
输出: I LOVE ZUCC
注:要求每完成一个解码或解密过程,输出结果。












答案:本次提交的作业为匿名提交,提交的实验报告、源代码、数据文件中不得出现有与作者相关的信息(例如姓名,学号等),如有出现,作0分处理。
作业上传格式为**zip**文档(该文档至少包含程序源代码,数据文件,实验报告等),如果格式错误,将会扣分。
每位同学都必须参与互评,未参与互评者将被扣分,请各位相互提醒。
互评作业不允许迟交,如果迟交,本次互评0分处理。
本次作业将开启查重,请大家独立完成作业。

# 大作业互评评分说明:
编程部分: 实现整个程序的代码 (满分50分) ,并有足够的注释。
测试部分: 给出合适的测试用例并进行时间性能分析 (满分20分),并进行讨论分析 (满分10分)。
实验报告部分: 撰写完成整体报告 (满分20分 ,其中 2分. 文档总体风格)。(实验报告内容包含数据结构的定义与分析;模块的算法分析;测试用例的选择原因以及测试结构;实验中存在的问题以及改正的方法。)
附加分: 在程序编写方面有较大的创新,并具有一定合理性或者提出了和本实验有关的实际应用,有一定合理性 (最多5分.)

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。