在“实验吧”的做CTF题时遇到的一道题,地址在这里:http://ctf5.shiyanbar.com/misc/cidai.html

因为正在学python,做这道题的时候正好用python写个简单程序辅助做题,将学到的知识用入实战,巩固一下python知识

感觉收获挺大,故此写下这篇随笔记录下。

----------------------------------------------------------华丽的分割线--------------------------------------------------------------------------

1.看题

首先题目给出的编码只有字符 'o' 和下划线 '_' ,可以很容易联想到二进制

接着观察样码,共有8行刚好对应 'Beijing' 有8个字符,并且每行只有7个字符,若表示成二进制刚好符合ASCII编码。

于是可以确定每一行可以转成一个二进制再通过ASCII编码转成字符

那么问题就来了是o代表0,_代表1呢?

还是o代表1,_代表0呢?

所以我们需要通过样码来确定

2.敲代码

这么多的符号,要是手动一个一个改成0,1再查ASCII码改成字符肯定不现实

而最近正好在学python,于是正好用python写一个小程序来实现这些功能 来练练手

我敲的代码如下:

 #coding=UTF-8
filename='2.txt'
with open(filename,'r') as file:
lines=file.readlines()
n=len(lines)
i=0 # 将o_码转为二进制码并写入文档
for i in range(0,n):
lines[i].rstrip('\n')
lines[i]=lines[i].replace('o','')
lines[i]=lines[i].replace('_','')
with open(filename,'a') as file:
file.write('\n\n')
for line in lines:
file.write(line) # 网上扒的一个将二进制串转为字符串的函数
def decode(s):
return ''.join([chr(m) for m in [int(b, 2) for b in s.split(' ')]]) for i in range(0,n):
lines[i]=decode(lines[i]) # 将解码后的字符串写入文档
with open(filename,'a') as file:
file.write('\n\n')
for line in lines:
file.write(line)

(如果对于代码有更好的建议可以告诉我)

这里先假设 'o'-->0,'_'-->1

3.解码

将样码放进2.txt文档里,执行后

打开2.txt,结果最后一行乱码了,说明假设错误,应当是'0'-->1,'_'-->0

修改代码后

成功了,得到了我们想要的结果

然后将需要解码的那一段放进1.txt里,执行就能得到结果

4.总结:

虽然这个题本身是很简单的,解题过程也是很简单的,对于一些大佬来说是完全不起眼的小题。但是对于小菜鸟的我来说,通过最近正学的python辅助解题的这个过程很有意义的。在写python代码的过程中,遇到的一些坎,在百度的过程中,一方面了解了很多还不知道的知识,另一方面还熟悉了一些代码,比如数据类型的转换,文件操作等。

总之,学习需要一点一点地积累。

Where there is a will,there is a way!

实验吧“解码磁带”的write up的更多相关文章

  1. 实验吧CTF题库-安全杂项

    XDCTF misc200: 题目提示: 下载文件 用foremost分离文件 接下来用archpr 4.53进行明文攻击 先把00002700.zip中的readme.txt提取出来压缩成zip文件 ...

  2. Android毕业设计-微圈

    勤拂拭软件出品,必属精品 : 勤拂拭软件 去年做了一个类似于我的朋友圈的项目,主要功能就是用户可以实时发表自己的动态,好友可以评论点赞什么的,可以建群,聊天啊,拉黑啊,反正是一个不错的社交软件,包含服 ...

  3. Verilog HDL那些事_建模篇笔记(实验八:键盘解码)

    1.PS2接口与协议时序图 对于PS2的接口来说,需要额外关注的是PIN5与PIN1,一个是时钟,一个是数据.PS2协议对数据的移位是“CLOCK下降沿”有效,其CLOCK的频率通常在10KHz左右. ...

  4. 20172332 2017-2018-2 《程序设计与数据结构》Java哈夫曼编码实验--哈夫曼树的建立,编码与解码

    20172332 2017-2018-2 <程序设计与数据结构>Java哈夫曼编码实验--哈夫曼树的建立,编码与解码 哈夫曼树 1.路径和路径长度 在一棵树中,从一个结点往下可以达到的孩子 ...

  5. 基于STM32F1 的BASIC解码实验 vb basic 液晶显示执行过程及结果

    基于STM32F1 的BASIC解码实验 1.basic程序以文件形式存储 2.程序文件存储在sd卡 3.解释结果显示在液晶屏上 主函数部分 int main(void){ u16 i,j; dela ...

  6. 图像压缩编解码实验(DCT编码+量化+熵编码(哈夫曼编码))【MATLAB】

    课程要求 Assignment IV Transform + Quantization + Entropy Coding Input: an intra-frame or a residue pict ...

  7. 协议分析 - DHCP协议解码详解

    协议分析 - DHCP协议解码详解 [DHCP协议简介]         DHCP,全称是 Dynamic Host Configuration Protocol﹐中文名为动态主机配置协议,它的前身是 ...

  8. 【图像处理】第三次实验:JPEG图像压缩

    1.任务说明 将LENA图像用JPEG方式压缩. 2.算法原理 JPEG(Joint Photographic Experts Group)是一个由ISO和IEC两个组织机构联合组成的一个专家组,负责 ...

  9. [python基础]关于中文编码和解码那点事儿

    我们在用python处理中文的时候,或多或少会遇到这样一些错误 常见错误1: SyntaxError: Non-ASCII character '\xe4' in file C 常见错误2: Unic ...

随机推荐

  1. python学习之路04——列表和字典

    列表和字典 python中的可变数据类型有:列表和字典 不可变类型:数字,字符串,元组 今天先讲列表和字典 一.列表 1.概念: 变量:使用变量存储数据,但是,变量存储数据每次只能存储一个数据 问题: ...

  2. vue安装过程

    我们3个安装参考的博客地址 http://blog.qianduanchina.cn/post/596c5bb27838a71273eb4da3 http://blog.csdn.net/unamat ...

  3. 软件工程第四次作业 石墨文档IOS

    待分析的产品:石墨文档IOS客户端 作业地址: https://edu.cnblogs.com/campus/nenu/2016CS/homework/2505   第一部分 调研, 评测 1.下载并 ...

  4. C++学习(三十九)(C语言部分)之 游戏项目(2048游戏)

    /***************************项目 2048**********************c语言编写 图形库制作时间:2019.04.03 准备工具: vs2013 图形库 i ...

  5. PHP 打开已有图片进行编辑

    <?php header("content-type:image/jpeg");//表明请求页面的内容是jpeg格式的图像 即当前页面会以图片的新式展示 去掉这行就可以显示正 ...

  6. Python Django orm操作数据库笔记之QuerySet API

    什么时候Django会将QuerySet转换为SQL去执行: 根据Django的数据库机制,对于QuerySet来说,当QuerySet被第一次构建,然后又调用他的filter方法,接着在对其进行切片 ...

  7. javascript运行机制之执行顺序详解

    1.代码块 指的的是有标签分割的代码段. 例如: <script type="text/javascript"> alert("这是代码块一"); ...

  8. zabbix之 自定义(指定特定磁盘)监控io

    引言 zabbix自带的模板,并且完成了我们的一些比较常用的监控,现在我们如果想要监控我们磁盘的IO,这时候zabbix并没有给我们提供这么一个模板,所以我们需要自己来创建一个模板来完成磁盘IO的监控 ...

  9. ElasticSearch的lowlevelApi和低级别API

    之前开发使用的其实都是lowLevel的api,所谓lowlevelapi就是操作ES的json字符串要自己去写:所谓highlevel的api就是指将查询的json字符串给对象化,创建一个Searc ...

  10. golang http proxy反向代理

    本文介绍golang中如何进行反向代理. 下面例子中, proxy server接收client 的 http request,转发给true server,并把 true server的返回结果再发 ...