Navigation

    喵了个咪乎

    • Register
    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups

    3.29

    学习打卡区
    1
    1
    5
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • 林
      林航锌 last edited by

      转轮机加密

      工作原理:

        转轮密码机由多个转轮构成,每个转轮旋转的速度都不一样,比如有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())

      1 Reply Last reply Reply Quote 0
      • First post
        Last post