HIT信息安全概论作业一整理
作业要求

第一部分
766C7273626F76706A5E6F715F7271766C72706D626B71
716C6C71666A62
分析过程
“二八妙龄”,再加上老师上课给的提示,可以猜到解密过程跟16有关,可以得出结论密文是用16进制。“爱上他”谐音ASCII码,
编写程序,分析密文

分析得密文为两段,前一段46个字符,后一段16个字符。且跟ASCII码有关,可以尝试将密文按照两个一组分割,查看对应字符

这个时候就很清楚了,可以分割成两个一组,为十六进制,尝试转换成字符

感觉很接近答案了,但是一个个字符不能组成有意义的句子,应该是哪里还没考虑到。
参考PPT,本章内容还是古典密码学,应该不会有过多复杂的操作,从置换密码带代换密码,无非是这两种其中一个
首先进行置换密码的尝试,最简单的还是在num上加某个数字进行移位
偶然发现刚好加3可以实现有意义的数字

于是将code2部分也进行移位,再改一下输出的格式,得到如下解密后的有意义的字符
youverysmartbutyouspent
tootime
总代码如下:
public class deciphering {
/**
* 密文:"766C7273626F76706A5E6F715F7271766C72706D626B71\n" +
* "716C6C71666A62"
* 明文:youverysmartbutyouspent
* tootime
* @param args
*/
public static void main(String[] args) {
String code=new String("766C7273626F76706A5E6F715F7271766C72706D626B71\n" +
"716C6C71666A62");
String code1="766C7273626F76706A5E6F715F7271766C72706D626B71";
String code2="716C6C71666A62";
System.out.println(code);
System.out.println("length of total:\t"+code.length());
System.out.println("length of code1:\t"+code1.length());
System.out.println("length of code2:\t"+code2.length());
// LinkedList<String> list1=new LinkedList<>();
String[] str1 = new String[23];
for (int i = 0; i <code1.length()/2 ; i++) {
str1[i]=""+code1.charAt(i*2)+code1.charAt(i*2+1);
}
System.out.println("code1:");
for (String str:str1){
// System.out.print(str+"\t");
// System.out.print(Integer.parseInt(str)+"\t");
int num=Integer.parseInt(str,16)+3;//16进制
System.out.print((char) num+"");
}
String[] str2 = new String[7];
for (int i = 0; i <code2.length()/2 ; i++) {
str2[i]=""+code2.charAt(i*2)+code2.charAt(i*2+1);
}
System.out.println();
System.out.println("code2:");
for (String str:str2){
// System.out.print(str+"\t");
int num=Integer.parseInt(str,16)+3;
System.out.print((char) num+"");
}
}
}
参考文章
(89条消息) java中十六进制和ASCII码互相转换。_Jsoh的博客-CSDN博客_java十六进制转ascii
第二部分
什么是“古典密码学的巅峰”,在深入探讨这个话题之前,让我们将密码学按照时间顺序审视一番,不难发现在1980这个时间节点(左右),将密码学大致分成了古典密码和现代密码,其评判依据为密码学是否成为一个独立的,有一整套科学的方法论的,是否成为了一种可以系统而严格地学习的科学,以及密码使用对象。所以我们在探究古典密码学巅峰的时候就可以思路清晰的按照时间的顺序进行资料的查询和整理,最后得出结论——什么是古典密码学的巅峰。
古典密码学和现代密码学的一个简单区分方法,古典密码更多的是一种艺术,没有系统的方法论,解密的过程大多数情况是靠解密者的“灵光一现”,在使用途径上,古典密码大情况用于军事用途。按照这个思路,得到关键词,“战争”。“密码学”,运用浏览器进行简单的检索,大致得出结论,在我心目中,古典密码学巅峰是二战时期雪毕伍斯(Arthur Scherbius)发明的恩尼格玛密码机。
被称为“二战里最难破解的密码体系”,恩尼格玛密码机是二战时期德国人吸取一战教训,以机器代替人工的方式加密,机器内部的“转子”,将电报内容进行替换,一个字母在明文的不同位置时,可以被不同的字母替换,而密文中不同位置的同一个字母,又可以代表明文中的不同字母,这种加密方式在密码学上被称为“复式替换密码”。通过这种加密方式得到的密码在当时通过以往的方式破解几乎是不可能的。转子的初始方向、转子之间的相互位置以及连接板的连线状况就组成了“恩尼格玛”三道牢不可破的保密防线,假使解密者已经了解了密码机的内部构造,但是其中转子初始方向,转子之间的相互位置,连接板的连接状况就能有上亿亿种排列组合的可能,推算如下:
三个转子不同的方向组成了26x26x26=17576种可能性;
三个转子间不同的相对位置为6种可能性;
连接板上两两交换6对字母的可能性则是异常庞大,有100,391,791,500种;
于是一共有17576x6x100,391,791,500,其结果大约为10,000,000,000,000,000!即一亿亿种可能性
但是,看似无敌的恩尼格码密码机最后还是被盟军破解了,除了物理意义上的泄密,即密码机结构泄露,恩尼格玛密码机本身存在一定的设计缺陷,比如威尔仕曼发明了专门破解恩尼格玛机接线板连接方式的“对角板”,图灵方法,它仅依赖于对密文本身的分析而不依赖于对其收发方式的分析,即“已知明文破译”的思路。
在现代科技树的支持下,恩尼格码密码似乎已经成为了一个老古董,使用DigitalOcean公司的云服务器和来自Enigma Pattern的人工智能软件,能在短短十几分钟内对密码进行破译。
但是,我们还是不能忘记在那个时代,反法西斯斗士们做出的鲜血和汗水。第二次世界大战期间,在布莱切利园,在波兰。密码破译者的天才工作挽救了许多平民和士兵的生命,据说将战争缩短了两年。

浙公网安备 33010602011771号