题目来源:su-ctf-quals-2014
题目描述:解密这段信息!

下载附件,内容如下

The life that I have
Is all that I have
And the life that I have
Is yours. The love that I have
Of the life that I have
Is yours and yours and yours. A sleep I shall have
A rest I shall have
Yet death will be but a pause. For the peace of my years
In the long green grass
Will be yours and yours and yours. decrypted message: emzcf sebt yuwi ytrr ortl rbon aluo konf ihye cyog rowh prhj feom ihos perp twnb tpak heoc yaui usoa irtd tnlu ntke onds goym hmpq

里面是一首诗,最后给出需要解密的信息。

这道题考察Poem Codes,知道了原理后,我们可以使用工具进行解密。

C:\Users\Administrator\Desktop\诗歌密码>python poemcode.py poem.txt cip.txt
...
ifytuothikcrnyptorapyisheansnweroyoturprbletheyoulodnotnowkwhatourrobemiuasbcdfgheijklnoprst
ifyouthinkcryptographyistheanswertoyourproblemthenyoudonotknowwhatyourproblemisabcdefghijklmnopqrstu
pakprictiyorhftyselorohyphurbeewterunhwooaywtooonrbpofjhsgkeilncmbrt
...

在众多生成的结果中寻找一个通顺的句子那便是flag。

注意:

1.将诗歌与密文分别存为poem.txt,cip.txt并移到与poemcode.py同目录下,使用工具破解
2.使用python2运行脚本
3.必须把一些特殊的字符去掉,比如诗歌中的“.”,如果不去掉,运行的时候会报错:IndexError: list assignment index out of range

扩展:Poem Codes——诗歌密码

诗歌密码在第二次世界大战中被广泛使用,它的工作方式如下:

首先,你需要先记住一首诗歌,它不需要太长,也不需要完整。比如下面这句截取自尤利西斯诗歌的片段就可以。

for my purpose holds to sail beyond the sunset, and the baths of all the western stars until I die.

然后,从中选择五个词作为关键字:比如“ for”,“ sail”,“ all”,“ stars”,“ die”。

接着,将它们串在一起,然后给字母编号,以“ a”开头为1,第二个“ a”开头为2,依此类推;如果没有第二个“ a”,则“ b”的编号为2;或者 如果没有“ b”,则“ c”被标记为2,依此类推,直到我们为所有字母编号。结果:

现在,假设我们要对下面这个消息进行加密:We have run out of cigars, situation desperate.

由于我们在诗歌中选中了18个字母,因此我们以18个字母为一组写出该消息,并用无用的字母填充结尾,如下所示:

注意,在第一个表格(关键字表格)中,第一个字母“f”,它的下面是6;第二个字母是“o”,下面是12。

相对应地,在第二个表格(我们填充的分组的消息)中,第六列字母是“eud”,而第12列是“tdk”。

我们一般按照五个字母为一组发送加密消息,这样可以减少(但当然不能消除)传输错误。

因此,我们信息的第一部分将是eudtd koekc pmwrt

尝试手动加密整个消息!您会发现这很容易做到,您还将看到错误在何处以及如何产生。

当然,我们还必须告诉接收方,我们选择了哪五个词作为关键字,分别是第1个,第6个,第14个,第17个和第20个。最简单的方法是替换字母,因此:“afnqt”将被附加到加密的消息上。然后,接收者可以(大致)遵循相反的步骤来解密消息。

当然,在以上的简短讨论中我们忽略了所有的细微差别。但要知道,用诗歌密码加密的短消息是很难破解的,尤其是当诗歌很少被用于加密或仅用其加密一次。如果这首诗是经常使用的,或者是众所周知的,那么破解用它加密的消息就不难了。另外,诗歌密码具有易用性和易记性的优点,并且不需要任何计算设备。

参考:

http://wmbriggs.com/post/1001/

https://github.com/abpolym/crypto-tools/tree/master/poemcode

最新文章

  1. ruby 基础知识(二)
  2. 【Debian】非法关机后无法联网 connect: network is unreachable
  3. docker和shipyard使用问题
  4. pthread clean up
  5. UESTC 1215 (思维题 旋转)
  6. 戴文的Linux内核专题:06配置内核(2)
  7. About Inside the Azure Storage Outage of November 18th
  8. 你尽力了么===BY cloudsky
  9. git 秘钥的生成
  10. Linux进程间通信——使用数据报套接字
  11. wind安装selenium
  12. openstack VM可以ping外部网络,但是外部网络ping不通VM
  13. C++统计代码注释行数 & 有效代码行数 & 代码注释公共行 & 函数个数
  14. web前端开发工程师
  15. 无组件客户端js图片压缩
  16. 《Thinking in Java》学习笔记(一)
  17. mac 下 clang++ 找不到头文件 stdlib.h
  18. 欲善其工必先利其器-----ThinkPad E430加装SSD固态硬盘和内存
  19. java之搭建webservice服务端
  20. python接口自动化测试十八:使用bs4框架爬取图片

热门文章

  1. 八、数据拟合分析seaborn
  2. thymeleaf+Springboot实现自定义标签
  3. linux环境下jmeter安装和运行
  4. 作为一名双非本科毕业的Java程序员,我该如何在日益严重的内卷化中避免被裁?
  5. 太神奇了!GIF的合成与提取这么好玩
  6. 一款基于SpringBoot+SpringSecurity的后台管理系统,强烈推荐
  7. csp-s模拟测试56(10.2)Merchant「二分」·Equation「树状数组」
  8. DOS命令行(1)——Windows目录与文件应用操作
  9. Hadoop - 彻底解决警告:WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform...
  10. Ubuntu18.04下安装Docker并配置SSL证书加密远程连接