得到上一道密码题的解答

偶然看到网上有一道密码学的题目,来了兴趣,试着解答一下,题目是这样的:


得到上一道密码题的解答



得到上一道密码题的解答

分析过程:

思路一:从密码看只有字母,而且可能是拼音。从线索看需要用到频率分析法和移位法,首先判断可能是‘’简单移位密码”,所以先用频率分析法分析每个字母出现的频率,在对应拼音的频率作为密钥,最后带入密钥进行解码。编程得出密文中字母频率为:{'A': 0, 'B': 11, 'C': 16, 'D': 13, 'E': 14, 'F': 38, 'G': 4, 'H': 9, 'I': 13, 'J': 57, 'K': 2, 'L': 36, 'M': 28, 'N': 71, 'O': 14, 'P': 1, 'Q': 14, 'R': 13, 'S': 54, 'T': 25, 'U': 2, 'V': 4, 'W': 11, 'X': 8, 'Y': 3, 'Z': 41},递减排序为:NJSZFLMTCQOEDRIBWHXVGYKUPA,以此作为密钥解码得到

“egbehzbzjzaqfckfancdboabkznafdblz hzdmzdbogldgjzdgeazbzlzeapaboc kfzlgcbzodbqfabeiakfaeapaboc qdzlgcjzfczfcgnajzdbewzb kdzmzmdhcaxaqfabekfgbe ogmabqfciahcahziandizdbejzdmzfajzamznakfzrfz fdzizdgjzaiarfzeakfcmzbenamzmdhcapaboc udmabeajcvabeea lgchzapabrczpdbkdgkdgjzcscrfzia ndbizchzdiatdgecznarfchcaqfabeecg lgchzapablgbejzbtzrfabejzbeiz ldbjzcecdzjzhzdbehzbeoabkz kczkfgbewglziaud pdbepabmabqfgbehzbncngbeiavdidgnafcd apoghzdbeszbebzuzdgqfclzeabzkczedbhzbescnamzmdhcapaboc tzbeeazqfcbznaizlgc lzrfdbejzcrfzscdbtcpaboc”

显然不正确,

思路二:移位分析法的线索没有用,结果一下子就解开了。原来就是凯撒密码,频率分析法只是误导的线索。基于python的暴力破解代码如下:(用提示中的移位分析工具也可以快速解出)

message = 'ltslcnsnonjhmzemjizfsbjsenijmfsdn cnfrnfsbtdftonftljnsndnljwjsbz emndtzsnbfshmjslqjemjljwjsbz hfndtzonmznmztijonfsluns efnrnrfczjpjhmjslemtsl btrjshmzqjczjcnqjifqnfslonfrnmjonjrnijemnxmn mfnqnftonjqjxmnljemzrnslijrnrfczjwjsbz yfrjsljozkjsllj dtzcnjwjsxznwfsefteftonzvzxmnqj ifsqnzcnfqjgftlznijxmzczjhmjsllzt dtzcnjwjsdtslonsgnxmjslonslqn dfsonzlzfnoncnfslcnslbjsen eznemtslutdnqjyf wfslwjsrjshmtslcnsizitslqjkfqftijmzf jwbtcnfslvnslsnynfthmzdnljsneznlfscnslvzijrnrfczjwjsbz gnslljnhmzsnijqndtz dnxmfslonzxmnvzfsgzwjsbz '
SYMBOLS = 'abcdefghijklmnopqrstuvwxyz'
for key in range(len(SYMBOLS)):

    translated = ''
    for symbol in message:
        if symbol in SYMBOLS:
            symbolIndex = SYMBOLS.find(symbol)
            translatedIndex = symbolIndex - key
            if translatedIndex < 0:
                translatedIndex = translatedIndex + len(SYMBOLS)
            translated = translated + SYMBOLS[translatedIndex]
        else:
            translated = translated + symbol
    print('Key #%s: %s' % (key, translated))


得到上一道密码题的解答


得到上一道密码题的解答


最后复盘一下,解密出的明文用频率分析法分析字母频率与标准频率做个对比,按频率降序:

标准降序:INEAUGHOZXYJLDRWMCSBQTPKFV(参考题目中的拼音频率分布图)

本文降序:IENUAGHOXZJLYMDWRCSQBTPFKV

可见前五位和后五位的重合率还是很高的。


ps:什么是凯撒密码

密码学中,恺撒密码(英语:Caesar cipher),或称恺撒加密恺撒变换变换加密,是一种最简单且最广为人知的加密技术。它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推。这个加密方法是以罗马共和时期恺撒的名字命名的,当年恺撒曾用此方法与其将军们进行联系。(来自某百科)

下图的外圈字母可转动,对应到内圈的字母,然后一一替换即可。之所以说最简单,就是因为只要转动26次,尝试26种对应关系就必然能破解。

得到上一道密码题的解答

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章