crypto1_中秋月

0x00 前言

CTF 加解密合集:CTF 加解密合集

0x01 题目

自动钥匙⊕

明文全大写,得到后转小写,并以_连接单词。

fsskryenvkm~jl{ejs}jwflzsnpgmifq{{j{|suhzrjppnx|qvixt~whu

0x02 Write Up

首先提示需要异或,进行异或的爆破

s = 'fsskryenvkm~jl{ejs}jwflzsnpgmifq{{j{|suhzrjppnx|qvixt~whu'
for i in range(255):
    res = ''
    for j in range(0, len(s)):
        temp = ord(s[j]) ^ i
        if 65 <= temp <= 90 or 97 <= temp <= 122:
            res += (chr(temp))
        else:
            break
    if len(res) == len(s):
        print(res)

然后根据提示是一个古典密码,查一下:

在这里插入图片描述

然后找到了自动秘钥的算法

DIC = "abcdefghijklmnopqrstuvwxyz"


def encrypt_autokey(string, key):
    ciphertext = ""

    key += string

    key_index = 0

    for i in string:

        if i not in DIC:
            ciphertext += i

        ciphertext += DIC[(DIC.index(i) + DIC.index(key[key_index])) % 26]

        key_index += 1

    return ciphertext


def decrypt_autokey(string, key):
    plaintext = ""

    key_index = 0

    for i in string:

        if i not in DIC:
            plaintext += i

        char = DIC[(DIC.index(i) - DIC.index(key[key_index])) % 26]

        key += char

        plaintext += char

        key_index += 1

    return plaintext

这里还少一个秘钥,所以需要进行爆破:

最终可以得到秘钥是KEYFORFLAG

最终的结果进行拼接即可。

以上

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值