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。

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

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

  1. 软件测试面试题:已知一个字符串为“hello_world_yoyo”, 如何得到一个队列 [“hello“,“world“,“yoyo“]

    已知一个字符串为"hello_world_yoyo", 如何得到一个队列 ["hello","world","yoyo" ...

  2. 手机号加密成7位“随机字符串”

    一.业务场景 需要将手机号作为用户标识,附加在短信后面进行埋点统计:统计用户数与点击数 二.核心思想 将手机号作为二进制字符串,平均分成5份,每份二进制字符串长度为7,2的7-1次方,不超过127,因 ...

  3. java 16进制数组 字符串_byte数组转换成16进制字符串和字符数组的方法

    byte数组转换成16进制字符串String: public class CommonUtil { /** * byte数组转换成16进制字符串 * @param src * @return */ p ...

  4. c语言如何让字符串变成空字符,C语言初始化字符串 c语言 如何将已赋值的字符串初始化为空?...

    C语言数组字符串初始化问题恋爱语录:能牵手的时候,请别肩并肩,能拥抱的时候,请别手牵手,能相爱的时候,请别说分开:拥有了爱情,请别去碰暧昧 字符数组的定义与初始化字符数组的初始化,最容易理解的方式就是 ...

  5. 把一个CString字符串以空格分隔成多个CString字符串

    一个CString字符串中含有多个空格分隔的小属性,如何把它以空格分隔成多个CString字符串. 例题:一个CString字符串:张三 20 四川 14478899@qq.com 如何把每一个小属性 ...

  6. matlab excel 新建sheet,MATLAB怎么在保存结果的EXCEL里面添加内容?比如把 'sheet1‘ 改成 ‘已知点’ ,在第一行加上 '已知点' ,'x', 'y' 等....

    优质解答 1.我觉得最简单的操作是,直接写入制定名字的工作表,然后手动删除sheet1,sheet2,sheet3这些不要的表格. 例如: YZD=rand(4,3); warning off MAT ...

  7. 记录一道已知是n,(p-1)*(q-2)和(p-2)*(q-1)的RSA题目writeup

    目录 题目 解题思路 解题脚本 题目 题目还是来源于qq群聊,是昨晚看到一个师傅问的,聊天记录中的图片如下: 这个图片还是比较容易ocr的,后面会给出解题脚本,就包括上面这些数字了. 解题思路 刚看到 ...

  8. 已知 方程 用 matlab 求表达式,已知自变量,因变量和函数表达式,可以用matlab求出函数表达式中的未知参数吗...

    答:这不是解方程,这是曲线拟合.如果你的已知的dr,R只有一个点,那么你的未知数是有无数个解的. cftool,拟合函数有一个选项是自定义函数. 答:用polyfit函数,即多项式拟合函数 设x=X- ...

  9. 已知计算组合的公式如下,用递归算法写出一个计算组合Cmn的值的函数zh(m,n),并写出主函数调用该函数。

    /* 已知计算组合数的公式如下,用递归算法写出一个计算组合Cmn的值的函数zh(m,n),并写出主函数调用该函数. 输入 两个整数 m,n(m>=n)输出 组合值样例输入 4 2 样例输出 6 ...

最新文章

  1. python实训心得2000_实训总结万能版2000字五篇
  2. 加速 PyTorch 模型训练的 9 个技巧
  3. php 根据键名分类求和,二维数组根据键值相加
  4. hdu-3015 Disharmony Trees---离散化+两个树状数组
  5. Python中OpenCV2. VS. CV1
  6. JQuery真的不难~第六回 JQ中的异步调用方式
  7. 承接数字油画图稿/线条图定制(出图)业务
  8. 论文浅尝 | 从 6 篇顶会论文看「知识图谱」领域最新研究进展 | 解读 代码
  9. graphpad做饼图_走进隆江糖饼老店,探秘绿豆饼制作过程
  10. 【通信】基于matlab GUI循环码编译码器【含Matlab源码 692期】
  11. GANs是如何创造出高分辨率的图像的
  12. WebService案例实例
  13. java case 字符_Java中Switch Case使用字符串
  14. 无法启动计算机打印机服务程序,Windows10下使用打印机时提示打印后台处理程序服务没有运行怎么办...
  15. 解决百度上传WebUploader在IE浏览器下点击无反应的问题
  16. java校内报纸实验报告_第六周Java实验报告四
  17. 大数高精度加减、乘除、开根(C++版全套最详细、最易懂)
  18. 如何预估项目的完成时间
  19. Excel-计算小数位数有几位、分离整数与小数
  20. 安卓京东自动炸年兽v4.1.1

热门文章

  1. Gamma阶段第八次scrum meeting
  2. 有源光缆AOC在40G网络布线中备受欢迎的主要原因
  3. spark DAGScheduler、TaskSchedule、Executor执行task源码分析
  4. Citrix Netscaler版本管理和选择
  5. 201671010128 2017-09-24《Java程序设计》之继承
  6. 过滤器,绑定事件,动画
  7. Linux使用jstat命令查看jvm的GC情况
  8. repadmin查看域控之间的复制状态
  9. Android 5.0 API 的变化——开发人员注意
  10. cacti添加I/O监控