当前位置: 首页 > article >正文

NSSCTF [SWPUCTF 2021 新生赛]非常简单的逻辑题

打开py附件

这段代码的作用是将flag字符串按照一定规则加密成result字符串。具体来说:

  1. 对于每个明文字符,计算其在字符集s中的两个索引s1s2
  2. 根据这两个索引,从字符集s中取出对应的两个字符,并根据当前位置i进行偏移。
  3. 将这两个字符连接起来形成加密后的字符对,最终构建加密后的result字符串。
# 初始的明文字符串
flag = 'xxxxxxxxxxxxxxxxxxxxx'

# 自定义的字符集
s = 'wesyvbniazxchjko1973652048@$+-&*<>'

# 初始化加密后的字符串
result = ''

# 遍历明文字符串中的每个字符
for i in range(len(flag)):
    # 计算字符在字符集中的索引
    s1 = ord(flag[i]) // 17
    s2 = ord(flag[i]) % 17

    # 根据索引计算加密后的字符对并添加到结果中
    result += s[(s1 + i) % 34] + s[-(s2 + i + 1) % 34]

# 输出加密后的结果
print(result)

# 预期的加密后的结果字符串
# result = 'v0b9n1nkajz@j0c4jjo3oi1h1i937b395i5y5e0e$i'

解题方法

1.爆破求解

flag = ''
result = 'v0b9n1nkajz@j0c4jjo3oi1h1i937b395i5y5e0e$i'
s = 'wesyvbniazxchjko1973652048@$+-&*<>'
num = 0

for i in range(0, len(result), 2):
    for j in range(255):
        if s[(j // 17 + num) % 34] == result[i] and s[-(j % 17 + num + 1) % 34] == result[i + 1]:
            flag += chr(j)
            num += 1

print('Decrypted flag:', flag)

2.求逆

flagg = ''  # 存储解密后的明文字符串
result = 'v0b9n1nkajz@j0c4jjo3oi1h1i937b395i5y5e0e$i'  # 加密后的字符串
s = 'wesyvbniazxchjko1973652048@$+-&*<>'  # 字符集
num = 0

# 遍历加密后的字符串result中的字符对
for i in range(0, len(result), 2):
    # 找到对应字符在字符集s中的索引
    a1 = s.index(result[i])  # a1 == s1 + num
    a2 = s.index(result[i + 1])  # a2 == 34 - (s2 + 1 + num)

    # 解密计算,得到明文字符的ASCII码
    flag_tmp = (a1 - num) * 17 + (33 - num - a2)

    # 将解密后的ASCII码转换为字符并添加到解密后的明文字符串中
    flagg = flagg + chr(flag_tmp)
    num = num + 1

print(flagg)

得到flag

NSSCTF{Fake_RERE_QAQ}


http://www.kler.cn/a/323503.html

相关文章:

  • 【ict基础软件赛道】真题-50%openGauss
  • 密码学在网络安全中的应用
  • 政务数据治理专栏开搞!
  • NVMe(Non-Volatile Memory Express)非易失性存储器访问和传输协议
  • 栈相关算法题1|通过栈判断链表是否对称|共享栈入栈出栈|括号匹配|多种括号配对|递归求序列最大值(C)
  • 11. 观光景点组合得分问题 |豆包MarsCode AI刷题
  • CodeFormer模型构建指南
  • 网络安全TARA分析
  • [Linux]磁盘分区指令
  • 带你0到1之QT编程:二十、QT与MySQL喜结连理,构建数据库应用开发
  • 大数据电商数仓项目--实战(一)数据准备
  • WebGIS开发及市面上各种二三维GIS开发框架对比分析
  • libreoffice word转pdf
  • 数据结构---顺序表之单链表
  • 关于 spi 的linux 的驱动的问题
  • Java和C语言语法细节(持续更新中)
  • pytorch ----【输入张量.data.size()/输入张量.size()】的使用
  • 基于MATLAB的虫害检测系统
  • Java实现找色和找图功能
  • 每天一道面试题(20):锁的发生原因和避免措施
  • C++ | 定长内存池 | 对象池
  • 【C语言】动态内存管理:malloc、calloc、realloc、free
  • 每天一道面试题(19):Spring Boot 中自动装配机制的原理
  • IIS开启后https访问出错net::ERR_CERT_INVALID
  • EasyExcel使用介绍
  • 【个人笔记】数据一致性的解决方案