CTF【解密】字符串flag被加密成已知新字符串,请解密出flag,可以使用Python解码出WriteUp

CTF-解密: 找出flag

task.py

# -*- coding: utf-8 -*-assert flag[0:5] == 'flag{'strAlphabet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'def encode(strOld, x, y, n):strNew = ''for i in strOld:if i in strAlphabet:num = strAlphabet.index(i)  # 返回索引值strNew += strAlphabet[(x*num - y) % n]else:strNew += iprint(strNew)if __name__ == '__main__':encode(flag, 29, 30, 52)# strNew = 'lDwO{kIDCmgI_bm_brI_cBL_crwDDIJOI}'

WriteUp:
由上述加密代码可知,我们要找的flag是以'flag{'开始的字符串,flag和加密后strNew中的字符都在strAlphabet中,不在的都原字符添加到strNew中,下标存在对应关系。

f对应l
l对应D
a对应w
g对应o

(29*num -30) % 52是对52取余数,取得整数可能是0, 1, 2, …

因此,解码如下:

main.py

# -*- coding: utf-8 -*-strAlphabet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
strNew = 'lDwO{kIDCmgI_bm_brI_cBL_crwDDIJOI}'def decode(strEncode, x, y, n):strFlag = ''for i in strEncode:if i in strAlphabet:index = strAlphabet.index(i)  # 返回索引值for nTemp in range(0, 28):if ((index + n*nTemp + y) % x) == 0:strFlag += strAlphabet[(index + n*nTemp + y) // x]breakelse:strFlag += iprint(strFlag)if __name__ == '__main__':decode(strNew, 29, 30, 52)

运行结果如下:

flg{Welcome_to_the_CTF_Chllenge}

由于a对应w,所以

加密后字符串:'lDwO{kIDCmgI_bm_brI_cBL_crwDDIJOI}'
加密前字符串:'flag{Welcome_to_the_CTF_Challenge}'

则,flag就是'flag{Welcome_to_the_CTF_Challenge}'

为什么for nTemp in range(0, 28):中nTemp最大取值是27,这是因为
strAlphabet字符串最大索引值是51,(index + 52*nTemp + 30) // 29 =51
,那么nTemp=(1449-index)//52,可以看出index最小值是0,nTemp最大可以取值27。

如果本文对您有所帮助,请关注微信公众号“捷创源科技”!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/546428.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

面试官 | count(1)、count(*) 、count(列名) 有什么区别?

作者 | BigoSprite来源 | 39sd.cn/0926A先看执行效果:1. count(1) and count(*)当表的数据量大些时,对表作分析之后,使用count(1)还要比使用count(*)用时多了! 从执行计划来看,count(1)和count(*)的效果是一样的。但是…

python ping利用线程池获取在线设备

python ping获取一个VLAN在线设备 myPyPingDevice.py """=== coding: UTF8 ===""" # 线程池:一次性开辟一些线程,我们用户直接给线程池提交任务,线程任务的调度交给线程池来完成 from concurrent.futures import ThreadPoolExecutor import…

【吐血整理】年度盘点 | 2019年Java面试题汇总篇——附答案

在这岁月更替辞旧迎新的时刻,老王盘点了一下自己 2019 年发布的所有文章,意外的发现关于「Java面试」的主题文章,竟然发布了 52 篇,几乎是全年每周一篇面试文章的节奏,当然其中有不少的面试题来源于网络,但…

【工作记录】android手势事件操作记录

/* 用户按下触摸屏、快速移动后松开 public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { //参数解释: // e1:第1个ACTION_DOWN MotionEvent // e2:最后一个ACTION_MOVE MotionEvent // velocityX&…

年终盘点 | 2019年Java面试题汇总篇(附答案)

作者 | 老王来源 | Java中文社群「微信公众号」在这岁月更替辞旧迎新的时刻,老王盘点了一下自己 2019 年发布的所有文章,意外的发现关于「Java面试」的主题文章,竟然发布了 52 篇,几乎是全年每周一篇面试文章的节奏,当…

Python操作MySQL的封装类

myPySql.py # -*- coding: utf-8 -*- import re import pymysql import myGlobal # myGlobal全局变量文件class MySql:"""python操作mysql数据库"""def __init__(self, strHost=127.0.0.1, nPort=3306,

面试官 | 如何在 Spring Boot 中进行参数校验?

作者 | 狂乱的贵公子来源 | cnblogs.com/cjsblog/p/8946768.html开发过程中,后台的参数校验是必不可少的,所以经常会看到类似下面这样的代码这样写并没有什么错,还挺工整的,只是看起来不是很优雅而已。接下来,用Valida…

Python读写ini文件的封装类

systemConfig.ini [Server] host = 192.168.70.254 port = 3306 user = root password = rootmyPyIniFile.py # -*- coding: utf-8 -*- import os import configparserclass doIniFile:"""python操作ini文件类

Dubbo 面试题汇总(附答案)

作者 | Dean Wang来源 | deanwang1943.github.iodubbo是什么dubbo是一个分布式框架,远程服务调用的分布式框架,其核心部分包含:集群容错:提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡…

飞凌 ok6410 按键驱动源码及测试代码

2019独角兽企业重金招聘Python工程师标准>>> 由于OK6410的GPIO按键中断已经被飞凌自带的按键驱动注册,所以运行我们编写的按键驱动前要先去掉飞凌自带的按键驱动,方法:make menuconfig->Device Drivers->input device suppo…

Python获取电脑硬件配置的封装类,可以获取CPU序列号、主板序列号、BIOS序列号、硬盘序列号和网卡MAC地址

Python获取电脑硬件配置的封装类,可以获取CPU序列号、主板序列号、BIOS序列号、硬盘序列号和网卡MAC地址。 myPyHardware.py # -*- coding: utf-8 -*- import wmiclass HardwareInfo:def __init__(self):self.c = wmi.WMI()self.strCPUSn = ""

面试官 | 什么是递归算法?它有什么用?

前言递归是算法中一种非常重要的思想,应用也很广,小到阶乘,再在工作中用到的比如统计文件夹大小,大到 Google 的 PageRank 算法都能看到,也是面试官很喜欢的考点最近看了不少递归的文章,收获不小,不过我发现…

双缓冲技术绘图

2019独角兽企业重金招聘Python工程师标准>>> 一、双缓冲技术的应用 当数据量很大时,绘图可能需要几秒钟甚至更长的时间,而且有时还会出现闪烁现象,为了解决这些问题,可采用双缓冲技术来绘图。我们知道,如果窗体在响应W…

2.Pycharm + Django + Python进行WEB路由配置

一、普通路由配置 1.利用PyCharm创建工程名为mysite的Django项目,在mysite文件上新建views.py视图文件,如下图示: 2.在urls.py文件中导入view.py视图文件 from . import views3.在urls.py文件中添加新的路由,如下图示&#xff1…

面试官 | Oracle JDK 和 OpenJDK 有什么区别?

作者 | petercao来源 | urlify.cn/yAn6ruOpenJDK是Sun在2006年末把Java开源而形成的项目,这里的“开源”是通常意义上的源码开放形式,即源码是可被复用的,例如IcedTea、UltraViolet都是从OpenJDK源码衍生出的发行版。Oracle JDK采用了商业实现…

关于终端的小脚本

#!/bin/bashwho|grep -v ^root |awk {print $1,$2} |while read user ttydo echo "$user :hi,i am root" >/dev/$ttydone向终端窗口或者是控制台(必须是普通用户登录的情况下)发送信息转载于:https://blog.51cto.com/menglinux/1434…

Python通过snmp获取交换机VLAN号、VLAN默认网关、VLAN子网掩码和ARP表中的IP地址与MAC对应记录数据

自己做项目时,自己封装的Python通过snmp获取交换机VLAN号、VLAN默认网关、VLAN子网掩码和ARP表中的IP地址与MAC对应记录数据。 myPySnmp.py源代码 """ mySnmpScan类,扫描核心交换机发送oid或MIB值获取对应数据 """ # -*- coding: utf-8 -*- i…

面试官 | 如何提高服务器的并发能力?

作者 | 潇洒一剑来源 | cnblogs.com/zengjin93/p/5569556.html什么是服务器并发处理能力一台服务器在单位时间里能处理的请求越多,服务器的能力越高,也就是服务器并发处理能力越强有什么方法衡量服务器并发处理能力1. 吞吐率吞吐率,单位时间里…

CentOS 7.0变动

一如每个主要版本的首个发行本,多数组件都已作出改动及更新至较新版本。列出所有改动是本文档的范围以外的事情。最重大的改动计有:内核更新至 3.10.0支持 Linux 容器Open VMware Tools 及 3D 图像能即装即用OpenJDK-7 作为缺省 JDK原地升级 6.5 至 7.0&…

html网页的结构框架代码

推荐使用Notepad编辑器写HTML代码 Notepad官网下载地址 html学习网址&#xff1a; w3school在线教程 html网页的结构框架.html <!--文档声明&#xff0c;声明当前网页的版本--> <!DOCTYPE html> <!--html的根标签&#xff08;元素&#xff09;&#xff0c;网…