zoukankan      html  css  js  c++  java
  • CTF<密码学> writeup 传统知识+古典密码

    小明某一天收到一封密信,信中写了几个不同的年份
              辛卯,癸巳,丙戌,辛未,庚辰,癸酉,己卯,癸巳。

              信的背面还写有“+甲子”,请解出这段密文。

    key值:CTF{XXX}

    百度可以查到有关传统知识

    可以得到年份 list = [28,30,23,8,17,10,16,30]

    +甲子,意为加60年,新的list = [88,90,83,68,77,70,76,90]

    这些数字相隔不大,很容易联想到ascii码的对应的字符值:

    栅栏密码python 代码:

    list = [28,30,23,8,17,10,16,30]
    i=0
    while i<len(list):
        list[i]+=60
        i+=1
    s=""
    i=0
    while i<len(list):
        s+=chr(list[i])
        i+=1
    print s
    #s='abcdefgh'
    fac = [x for x in range(1,len(s))]
    i=1
    print fac
    for j in range(len(fac)):
        str1=''
        for i in range(fac[j]):
            k=0
            while i+k<len(s):
                str1+=s[i+k]
                k+=fac[j]
        print str1

    进行一轮栅栏算法解密得到的结果:

    XZSDMFLZ

    XSMLZDFZ

    XDLZMZSF

    XMZFSLDZ

    XFZLSZDM

    XLZZSDMF

    XZZSDMFL

    发现没有什么特别规律,然后对每一个进行凯撒解密,python代码如下:

    i=0
    s=input("Input the string:")
    s.upper()
    for j in range(25):
        str1=''
        for i in range(len(s)):
            str1+=chr((ord(s[i])-64+j)%26+64)
        print str1

    当试到第4个字符串时:

    XM@FSLD@

    YNAGTMEA

    @OBHUNFB

    APCIVOGC

    BQDJWPHD

    CREKXQIE

    DSFLYRJF

    ETGM@SKG

    FUHNATLH

    GVIOBUMI

    HWJPCVNJ

    IXKQDWOK

    JYLREXPL

    K@MSFYQM

    LANTG@RN

    MBOUHASO

    NCPVIBTP

    ODQWJCUQ

    PERXKDVR

    QFSYLEWS

    RGT@MFXT

    SHUANGYU

    TIVBOH@V

    UJWCPIAW

    VKXDQJBX

    flag就是SHUANGYU

  • 相关阅读:
    链表 | 递归删除不带头结点链表所有x元素
    A1016 | 磨人的大模拟
    Ubuntu 下安装 Qt Designer
    shell札记
    A1102 | 反转二叉树
    顺序表 | 二分查找:两个数组合并后的中位数
    A1113 | Integer Set Partition (25)
    A1128 | 逻辑想象能力、简洁高效美观的代码、memset的使用情景
    05.字符串
    04.序列的应用
  • 原文地址:https://www.cnblogs.com/Dancing-Fairy/p/10795635.html
Copyright © 2011-2022 走看看