Write up

1.

题目:

var="************************************"
flag='NSSCTF{' + base64.b16encode(base64.b32encode(base64.b64encode(var.encode()))) + '}'
print(flag)

小明不小心泄露了源码,输出结果为:4A5A4C564B36434E4B5241544B5432454E4E32465552324E47424758534D44594C4657564336534D4B5241584F574C4B4B463245365643424F35485649534C584A5A56454B4D4B5049354E47593D3D3D,你能还原出var的正确结果吗?

分析:

题目的{}中有三重解密,分别显示为base16,base32,base64

依次使用代码破解:

base16

import base64
a=input()
res = base64.b16decode(a.encode('utf-8')).decode('utf-8')
print(res)

得到:JZLVK6CNKRATKT2ENN2FUR2NGBGXSMDYLFWVC6SMKRAXOWLKKF2E6VCBO5HVISLXJZVEKMKPI5NGY===

base32

import base64
a=input()
res = base64.b32decode(a.encode('utf-8')).decode('utf-8')
print(res)

得到:NWUxMTA5ODktZGM0My0xYmQzLTAwYjQtOTAwOTIwNjE1OGZl

base64

import base64
bs64 = input('请输入需要解密的文本\n>>>')
bs64_d = str(base64.b64decode(bs64),'utf-8')
print('结果如下')
print(bs64_d)

得到:5e110989-dc43-1bd3-00b4-9009206158fe

最后使用NSSCTF{}包裹即可。

2.

题目:

import base64
def caesar(plaintext):
    str_list = list(plaintext)
    i = 0
    while i < len(plaintext):
        if not str_list[i].isalpha():
            str_list[i] = str_list[i]
        else:
            a = "A" if str_list[i].isupper() else "a"
            str_list[i] = chr((ord(str_list[i]) - ord(a) + 5) % 26 + ord(a) or 5)
        i = i + 1

    return ''.join(str_list)

flag = "*************************"
str = caesar(flag)
print(str)

#str="U1hYSFlLe2R0em1mYWpwc3RiaGZqeGZ3fQ=="

分析:

这里定义了一个字符串变量flag,但它被赋值为一串星号,应该是原本要放置真正需要加密的内容。然后凯撒移位5,究竟是移位+5还是-5呢。

思考原文究竟是什么:

1)str=‘一串类似于base64的密文’

2)将其使用base64解密得到:SXXHYK{dtzmfajpstbhfjxfw},即为原文。

使用凯撒移位-5,去掉{}

# Caesar
def shift_transform(input_m, shift):     # 移位变换函数(输入明文以及移位数)
    output_c = ""     # 定义初始的输出字符串为空
    for i in range(len(input_m)):  
        char = input_m[i]  
        # 区分大小写后进行移位变换
        if char.isupper():
            # 大写字母的ASCII从65开始
            output_c += chr((ord(char) + shift - 65) % 26 + 65)
        else:
            # 小写字母的ASCII从97开始
            output_c += chr((ord(char) + shift - 97) % 26 + 97)
    return output_c  
Message_test = "SXXHYKdtzmfajpstbhfjxfw"  # 在这里输入你想要的明文
shift_num =-5  # 在这里设置移位数
print("原始字符串为:" + Message_test)
print("移位数:" + str(shift_num))
print("移位变换后的字符串为:" + shift_transform(Message_test, shift_num))

得到:NSSCTFyouhaveknowcaesar

最后加上{},得到:NSSCTF{youhaveknowcaesar}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值