「配枪朱丽叶。」

RootのCTF学习笔记。

WhaleCTF-Decode8(凯撒解密脚本)

凯撒和某某加密,“aZZg/x\ZbavpZiEZp+n)o+“,格式flag{xxxx}

下面是一个凯撒移位脚本:

# 实现33-126ASCII能打印的字符循环平移
# 和通常凯撒加密不同注意
def change(c, i):
    num = ord(c)
    if (num >= 33 and num <= 126):
        num = 33 + (num + i - 33) % (94)  # 126-33=93
    return chr(num)


def kaisa_jiAmi(string, i):
    string_new = ''
    for s in string:
        string_new += change(s, i)
    print(string_new)
    return string_new


# 本题有种暴力解密感觉
def kaisa_jiEmi(string):
    for i in range(0, 94):
        print('第' + str(i + 1) + '种可能:', end='   ')
        # 区别在于 string 是该对象原本就是字符串类型, 而 str()则是将该对象转换成字符串类型。
        kaisa_jiAmi(string, i)


# 你要知道input输入的数据类型都是string
def main():
    print('请输入操作,注意不是平常26种:')
    choice = input('1:恺撒加密,2:凯撒穷举解密.请输入1或2:')
    if choice == '1':
        string = input('请输入需要加密字符串: ')
        num = int(input('请输入需要加密的KEY: '))
        kaisa_jiAmi(string, num)
    elif choice == '2':
        string = input('请输入需要解密字符串: ')
        kaisa_jiEmi(string)
    else:
        print('输入错误,请重试')
        main()


if __name__ == '__main__':
    main()

运行后不难看出f__l4}a_gf{u_nJ_u0s.t0比较可疑。
普通的栅栏密码解密工具解不出来的,前两个三个三个分,后面是两个两个分,得到flag