• 古典密码-波利比奥斯方阵密码Polybius


    波利比奥斯方阵密码Polybius简介

    公元前2世纪,一个叫Polybius的希腊人设计了一种将字母编码成符号对的方法,他使用了一个称为Polybius的校验表,这个表中包含许多后来在加密系统中非常常见的成分。Polybius校验表由一个5行5列的网格组成,网格中包含26个英文字母,其中I和J在同一格中。相应字母用数对表示。在古代,这种棋盘密码被广泛使用。Polybius校验表如下

    0zF6aR.png

    (2,4)这个坐标既可以表示i 也可以表示 j因此破解的时候这里又会多两种情况

    栗子

    假设明文序列为 attack at once ,使用一套秘密混杂的字母表填满波利比奥斯方阵,如下

    A D F G X
    A b t a l p
    D d h o z k
    F q f v s n
    G g j c u x
    X m r e w y
    1. i 和 j视为同一格
    2. 选择这五个字母,是因为它们译成摩斯密码时不容易混淆,可以降低传输错误的机率

    根据上面的Polybius方阵将对应的明文进行加密。其中,A,D,F,G,X也可以用数字1,2,3,4,5来代替,这样密文就成了:

    明文 A T T A C K A T O N C E
    密文 AF AD AD AF GF DX AF AD DF FX GF XF
    13 12 12 13 43 25 13 12 23 35 43 53

    相关题目

    题目信息

    密文:ouauuuoooeeaaiaeauieuooeeiea

    hint: VGhlIGxlbmd0aCBvZiB0aGlzIHBsYWludGV4dDogMTQ=

    题目分析

    基本的解题方阵如下

    0zAggK.jpg

    base64解密后信息为The length of this plaintext: 14,提示长度为14,再根据密文为14×2位,可以推测位波利比奥斯方阵密码

    解密脚本

    import itertools
    ciper = 'ouauuuoooeeaaiaeauieuooeeiea'
    head = 'aeoiu'
    headlist = []
    num_headlist = []
    
    # 先列举处aeiou五种的不同排序
    x = itertools.permutations(head,5)
    for i in x:
        temp = "".join(i)
        headlist.append(temp)
    print(headlist)
    
    # 根据aeiou对应的12345修改ciper的对应值,便于后续的遍历得到结果
    for i in headlist:
        temp = ''
        for j in ciper:
            temp += str(i.index(j) + 1)        
        num_headlist.append(temp)
    print(num_headlist)
    
    # 将ciper对应的数字乘上比例加上96再转为ASCII码,即 可得到对应的字母
    for i in num_headlist:
        temp = ''
        for j in range(0,len(i),2):
            xx = (int(i[j]) - 1)*5 + int(i[j+1]) + 96   # 前一个为乘上5加上后一个就正好对应了表格中的字母
            if xx>ord('i'):
                xx+=1
            temp += chr(xx)
        print(temp)
    

    参考:

    [BJDCTF2020]Polybius(波利比奥斯方阵密码)

    Polybius密码(棋盘密码

  • 相关阅读:
    Best Practices for Background Jobs_3 Managing Device Awake State之电源锁、Alarm、WakefulBroadcastReceiver
    一种扩大View点击范围的方法
    IntentService
    DNS
    GPU硬件加速相关
    SOA 面向服务的体系结构
    android APK 文件的生成过程
    PHP简介
    代码安装apk文件
    View 的 focus 和 selected 状态, TabContainer实现
  • 原文地址:https://www.cnblogs.com/labster/p/13842837.html
Copyright © 2020-2023  润新知