这周基本都在考试,上周的作业解析就延迟了一周写。昨天刚考完,今天赶紧补上。
先来看个密码的背景知识。
1938年8月,国民政府迁都重庆,蒋介石坐镇重庆,筹划正面战场的抗战事宜。一时间,日机频频飞临重庆上空,实施狂轰滥炸。可令人费解的是,密布在重庆四周的国民党高炮部队,每当日机飞临,均以猛烈的炮火反击,可很少有敌机被击落。
国民党的情报机关也发现了一个异常现象,日军与重庆当地的一些隐蔽电台通讯频繁,所用密码十分奇特,难以破译。蒋介石下令求助于美国情报部分,解决这一难题。
国民政府通过美国使馆,聘请破译专家、美国密码之父赫伯特·亚德利来华,一面传授无线密码通讯破译技术,一面协助侦破重庆的日本间谍案。亚德利到重庆后,夜以继日地跟踪、研究日本的密码通讯,终于发现了一个绰号为“独臂大盗”的日本间谍的行踪,亚德利断定此人与日军轰炸重庆有直接关系,但此人具体情况不明,特别是他与日本情报机构的来往电文因密码怪异,无法破译。
在此后的工作中,亚德利根据其通讯密码字母、数位元等排列的规则,发现这种密码是书籍密码,底本是一部英文长篇小说,要破译此密码,必须尽快弄清“独臂大盗”的情况,找到这本英文小说。
经过一段时间的努力,国民党情报人员终于搞清了“独臂大盗”的身份。原来,此人是国民党川军高炮部队的一名军官,出身土匪,会说流利的英语,他经不住日本特务的拉拢,勾结蒋介石的德国顾问赫尔·韦纳形成一个间谍网,大肆搜集重庆方面的情报,不但为日军指示轰炸目标,而且还将重庆高射炮最高射距12000英尺的重要信息用密码电台告知日本特务机关,致使日机进入重庆上空后均在12000英尺以上飞行,避开中国高炮部队的打击,疯狂投掷炸弹,来去自由。
亚德利决定亲自出马拜会“独臂大盗”。他先找到在中国的朋友徐贞小姐,因为她是“独臂大盗”的女朋友,向她申明大义,讲清此案的重要性,然后与徐贞一起亲见“独臂大盗”。徐贞是一个具有爱国热情的女子,她不避危险,决然应允。她和亚德利来到“独臂大盗”家中,终于在其书房中发现了那本充当密码底本的英文小说——美国著名女作家赛珍珠的获诺贝尔文学奖的长篇小说《大地》。
很快,随着“独臂大盗”的落网,潜伏在重庆的日本间谍网遭到致命打击。此后,日军对重庆的轰炸越来越多地付出了沉重代价。破获这样微妙的无线电通讯密码,这在国际特工史上是不多见的,亚德利功不可没,蒋介石亲自召见他以示嘉勉。徐贞也在破获此案中立下汗马功劳。为了摆脱日伪特务机关的跟踪,徐贞决定前往香港。可是,在她渡过嘉陵江前往机场时,日伪特务制造了她所乘的舢板的翻沉事故,她被淹没在滔滔江水中。
上周的007挑战故事背景是在冷战时期,苏联会有一个重要的军事行动,一个线人需要在某天的某点某地约007碰面,但这个情报又必须在公开场合里传递,为保险,线人把碰面的地点和时间化为几个数字写在餐巾纸留在了餐厅,收到纸条的007知道,每组数字对应的是一本书的某页上的某个单词,拼接起来就是某点某地的接头地点了。(提示,结合dict和字符串函数)
可以有2个方式参加,模拟线人编码和模拟007解码
tips:可以用dict,比如dict['1']='xxxx
这个任务可能007收到的字条如下:
'
010712
022024
031112
040708
051113
'
怎么破解数字的含义呢?007知道,线人肯定是用他们共用的一本小说作为编码本进行编码的。
假设007用python来进行解码的。他的思路可能是:
第一个数字代表小说第n页,后面的代表该页的内容的开始和结束位置。
007会把小说想办法按页为键值导入一个字典里。value就是当页的内容,也就是字符串。
他会这么写:
dict_nov[页数]=内容
造好按小说内容形成的字典后,他再按数字串的编码内容,按某页的位置输出字符串就达到了目的。
假设007也刚开始学习python,不会太自动化作业。007编写解码的程序如下:
从解码的文字来看,原来他们接头的地点是'North Park',接头的时间是'Pm 12'点。
看了大大的解析才知道我原来没有理解那一堆数字的含义。前面两个数字就相当于把这一行数字定位了,后面的数字则是字典里用来定位单个单词的。在大大的代码里发现了一个很有意思的事情:字典里面的索引不是只能用一个中括号的,它可以根据需要用多个,只要所有索引不重复就行。按照大大的代码又敲了一遍