3.29



  • 转轮机加密

    工作原理:

      转轮密码机由多个转轮构成,每个转轮旋转的速度都不一样,比如有3个转轮,分别标号为1,2,3,其中1号转轮转动26个字母后,2号转轮就转动一个字母,当2号转轮转动26个字母后,3号转轮就转动1个字母。因此,当转轮密码机转动26X26X26次后,所有转轮恢复到初始状态,即3个转轮密码机的一个周期长度为26X26X26(17576)的多表代换密码。
    

    015989fe-2907-4ca6-a0e8-f4223f6ea45c-image.png

    杰弗逊转轮加密

    例子:

    1: < ZWAXJGDLUBVIQHKYPNTCRMOSFE <
    2: < KPBELNACZDTRXMJQOYHGVSFUWI <
    3: < BDMAIZVRNSJUWFHTEQGYXPLOCK <
    4: < RPLNDVHGFCUKTEBSXQYIZMJWAO <
    5: < IHFRLABEUOTSGJVDKCPMNZQWXY <
    6: < AMKGHIWPNYCJBFZDRUSLOQXVET <
    7: < GWTHSPYBXIZULVKMRAFDCEONJQ <
    8: < NOZUTWDCVRJLXKISEFAPMYGHBQ <
    9: < XPLTDSRFHENYVUBMCQWAOIKZGJ <
    10: < UDNAJFBOWTGVRSCZQKELMXYIHP <
    11: < MNBVCXZQWERTPOIUYALSKDJFHG <
    12: < LVNCMXZPQOWEIURYTASBKJDFHG <
    13: < JZQAWSXCDERFVBGTYHNUMKILOP <

    密钥为:2,3,7,5,13,12,9,1,8,10,4,11,6
    密文为:NFQKSEVOQOFNP

    首先托马斯-杰弗逊转轮加密由三串字符串组成,第一部分为加密表,第二部分为密钥,第三部分为密文 加密表就是我们需要利用密钥和密文来进行加密,具体的过程如下: 首先查看密钥第一个字符为2,因此我们需要到加密表中去查找第2行的数据 2: < KPBELNACZDTRXMJQOYHGVSFUWI < 这里我们再利用密文的第一个字符N进行旋转,N在这里的作用就是旋转过后的第一个字符即为N,在这里的旋转为循环,不为补0 因此我们可以来对加密表中的第一段密文进行解密: 原先:KPBELNACZDTRXMJQOYHGVSFUWI 旋转:NACZDTRXMJQOYHGVSFUWIKPBEL 同理下面的字符串也可以利用同样的方式进行解密

    脚本:

    #!/usr/bin/env python3# -- coding:utf-8 --
    import re
    sss = '1: < ZWAXJGDLUBVIQHKYPNTCRMOSFE < 2: < KPBELNACZDTRXMJQOYHGVSFUWI < 3: < BDMAIZVRNSJUWFHTEQGYXPLOCK < 4: < RPLNDVHGFCUKTEBSXQYIZMJWAO < 5: < IHFRLABEUOTSGJVDKCPMNZQWXY < 6: < AMKGHIWPNYCJBFZDRUSLOQXVET < 7: < GWTHSPYBXIZULVKMRAFDCEONJQ < 8: < NOZUTWDCVRJLXKISEFAPMYGHBQ < 9: < XPLTDSRFHENYVUBMCQWAOIKZGJ < 10: < UDNAJFBOWTGVRSCZQKELMXYIHP < 11 < MNBVCXZQWERTPOIUYALSKDJFHG < 12 < LVNCMXZPQOWEIURYTASBKJDFHG < 13 < JZQAWSXCDERFVBGTYHNUMKILOP <'
    m = 'NFQKSEVOQOFNP'# 将sss转化为列表形式
    content=re.findall(r'< (.*?) <',sss,re.S)# re.S:DOTALL,此模式下,"."的匹配不受限制,可匹配任何字符,包括换行符
    iv=[2,3,7,5,13,12,9,1,8,10,4,11,6]print(content)
    vvv=[]for i in range(13):
    index=content[iv[i]-1].index(m[i])
    vvv.append(index)print(vvv)
    for i in range(0,26):
    flag=""
    for j in range(13):
    flag += content[iv[j]-1][(vvv[j]+i)%26]
    print(flag.lower())


Log in to reply