poem_encrypt是一种非常有意思的加密方式 介绍
今天学习了一下这种加密方式,所以在这里讲一下我的理解
poem_encrypt举例说明
1、一首诗
for my purpose holds to sail beyond the sunset, and the baths of all the western stars until I die.
2、从一首诗中选出k个单词(这里是6个),去掉特殊字符,组成一个字符串,给每个字符(该字符串字典序后的)序号
选取:“for”, “sail”, “all”, “stars”, “die.”
f | o | r | s | a | i | l | a | l | l | s | t | a | r | s | d | i | e |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
6 | 12 | 13 | 15 | 1 | 7 | 9 | 2 | 10 | 11 | 16 | 18 | 3 | 14 | 17 | 4 | 8 | 5 |
3、选出来的字符串长度为18,所以将明文分成每行18个字符(去掉特殊字符),不足一行用’abc…'补足
明文:“We have run out of cigars, situation desperate.”
4、然后将这18列按照上面的6,12,13,15,1…的顺序组合到一起
就变成了:eud tdk oek cpm wrt…
再将加密的字符串按照某个长度切分:(这里是4)
eudt dkoe kcpm…
就变成了密文,最后传输的时候需要告诉收信人我使用了哪几个单词作为我的秘钥:
因为这里是第1个单词,第6个单词、第14个单词、第17个单词、第20个单词
所以编码后: afnqt(a表示1,f表示6,n表示14…)
tips: 这里其实就是单词在诗中的位置 对 26 取模的结果
所以最后的密文应该是:
afnqt eudt dkoe kcpm …
那么,给定了诗和密文,我们该怎样解码呢?
1、取密文的第一个字符串,解码得到我用了诗中哪些单词进行了加密
因为这里对26取模了,所以会有很多种情况
2、枚举每种秘钥进行,如果知道密码的话,按照加密流程,还原一下字符串顺序就可以了
code:(也就是攻防世界Decrypt-the-Message的解密脚本)
import itertools
def load_file(filename)