Bugku——Misc——0和1的故事

给出的附件是一串01代码,内容如下

0000000001110010000000000
0000000000011110100000000
0000000001110001000000000
0000000010111100000000000
0000000010101010000000000
0000000001100010100000000
0000000010101010100000000
0000000001000001100000000
1100011101110110100011000
0001000010110010010010100
0100111101000011101110011
0011110100101011001001001
1000001001100001001101000
1111000111111011100101000
1011011111001101111110111
1000110110010010101101100
1000111100111111111110111
0000000010110001100010100
0000000010010100101010001
0000000010101010100011001
0000000000100111111110010
0000000000011001011110111
0000000001001100100100001
0000000011000011011011001
0000000011010000101110101

  通过观察发现,每一行一共有25个01字符,一共有25行,我们知道,ASCII编码的二进制是8位,Base64编码的二进制是6位,25都无法整除,可以排除。而培根密码则正好是由AB组成的编码,每五位对应一个字符,尝试过后排除。

  我们知道矩阵式二维码是由许多小方格组成,每一个方格为有颜色或者无颜色,在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念。所以我们可以把这些01代码看作一个二维码,我们只需要将这个二维码给还原出来即可。
在这里插入图片描述

  可以用excel将二维码画出来,因为excel正是一个个的小方格,可以自寻操作,在这里主要记录用Python来编写脚本。

  

import turtle

def fill(start_x, start_y):
    '''
    This function will draw a square whose four points are (x, y), (x + 40, y), (x + 40, y + 40), (x, y + 40).
    Then the pen go back to the starting coordinates. After that, fill the square up in black.

    :param start_x: The x coordinate of the starting point of the pen
    :param start_y: The y coordinate of the starting point of the pen
    :return: None
    '''

    turtle.penup()      # 将笔抬起,防止移动过程产生轨迹
    turtle.goto(start_x, start_y)       # 移动到指定点
    turtle.pendown()        # 落笔
    turtle.fillcolor(0, 0, 0)       # 填充颜色为黑色
    turtle.begin_fill()     # 开始填充

    # 绘制一个边长为40的正方形
    turtle.goto(start_x + 20, start_y)
    turtle.goto(start_x + 20, start_y - 20)
    turtle.goto(start_x, start_y - 20)
    turtle.goto(start_x, start_y)

    turtle.end_fill()       # 结束填充
    turtle.penup()



turtle.screensize(500, 500)       # 设置画布为长和宽均为1000像素的正方形
turtle.speed(10)        # 将速度设置为最快
turtle.hideturtle()     # 将笔隐藏起来
turtle.pencolor(0, 0, 0)        # 设置笔的颜色为黑色
x = -250
y = 250
turtle.penup()
turtle.goto(x, y)

with open("0and1.txt","r") as f:
    for line in f.readlines():
        string = line.strip()
        for char in string:
            if char == '0':
                turtle.penup()
                x += 20
                turtle.goto(x, y)
            else:
                fill(x, y)
                x += 20
        x = -250
        y -= 20




turtle.done()

PIL库
  这一方法是我看别人的题解时看到的,我做题的时候并不知道PIL库

from PIL import Image
MAX = 25
#二维码大小
pic = Image.new("RGB",(MAX, MAX))
str = """0000000001110010000000000
0000000000011110100000000
0000000001110001000000000
0000000010111100000000000
0000000010101010000000000
0000000001100010100000000
0000000010101010100000000
0000000001000001100000000
1100011101110110100011000
0001000010110010010010100
0100111101000011101110011
0011110100101011001001001
1000001001100001001101000
1111000111111011100101000
1011011111001101111110111
1000110110010010101101100
1000111100111111111110111
0000000010110001100010100
0000000010010100101010001
0000000010101010100011001
0000000000100111111110010
0000000000011001011110111
0000000001001100100100001
0000000011000011011011001
0000000011010000101110101
"""
# str为获取的01片段
i=0
for y in range (0,MAX):
    for x in range (0,MAX):
        if(str[i] == '1'):
            pic.putpixel([x,y],(0, 0, 0))
        else:
            pic.putpixel([x,y],(255,255,255))
        i = i+1
pic.show()

在这里插入图片描述

  由于缺少定位符,用CQR将其补全即可
在这里插入图片描述

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
InputStream和OutputStream是Java IO库中的两个重要类。它们用于处理字节流的输入和输出操作。 InputStream是一个抽象类,它是所有字节输入流的父类。它提供了一系列方法来读取字节数据。例如,可以使用FileInputStream类来创建一个输入流对象,然后使用read()方法逐个字节地读取文件中的数据。\[1\]\[3\] OutputStream也是一个抽象类,它是所有字节输出流的父类。它提供了一系列方法来写入字节数据。例如,可以使用FileOutputStream类来创建一个输出流对象,然后使用write()方法将字节数据写入文件中。\[1\]\[2\] 这两个类可以用于文件的读取和写入操作。例如,可以使用FileInputStream读取一个文件的字节数据,然后使用FileOutputStream将读取到的字节数据写入另一个文件中,实现文件的复制功能。\[2\] 需要注意的是,在使用这两个类进行文件操作时,需要在操作完成后及时关闭流,以释放资源。可以使用try-finally或try-with-resources语句来确保流的关闭。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *2* [java基础io流——OutputStream和InputStream的故事(温故知新)](https://blog.csdn.net/weixin_36586120/article/details/80486112)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [InputStream和OutputStream](https://blog.csdn.net/sspudding/article/details/88673551)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值