zoukankan      html  css  js  c++  java
  • 派大星的烦恼MISC

    挺有意思的杂项,python将二进制转图片的时候出现的图片不像二维码,想看题解的时候发现网上的大部分题解都是直接转发,更有意思了。

    题目是派大星的烦恼,给了我们一张粉红图片,放进010editor里面

     可以看到这里就是题目里面所说的派大星的伤疤了。

    题目里面的描述,说0X44和0X22是伤疤的两种细胞,另外的就是派大星的赘肉。很自然地我们可以想到这个是二进制对应的01

    这里是d":

    "DD"DD""""D"DD""""""DD"""DD"DD""D""DDD""D"D"DD""""""DD""D""""DD"D"D"DD""""D"DD""D"""DD"""""DDD""""D"DD"""D"""DD"""D""DD"D"D"DD"""DD""DD"D"D""DD""DD"DD"""D"""DD""DD"DD""D"D""DD"D"D"DD"""D"""DD"""D"DD""DD"""DD"D"D""DD"""D"DD""DD""DD"""""DDD""DD""DD"""D""DD""
    

    我们将"为0 D为1,替换得到:

    0110110000101100000011000110110010011100101011000000110010000110101011000010110010001100000111000010110001000110001001101010110001100110101001100110110001000110011011001010011010101100010001100010110011000110101001100010110011001100000111001100110001001100
    

    刚好是16X16

    猜测是一个黑白二维码

    用python画一下:

    from PIL import Image
    x = 16
    y = 16
     
    im = Image.new('RGB', (x, y))
    white = (255, 255, 255)
    black = (0, 0, 0)
     
    with open('file.txt') as f:
        for i in range(x):
            ff = f.readline()
            for j in range(y):
                if ff[j] == '1':
                    im.putpixel((i, j), black)
                else:
                    im.putpixel((i, j), white)
    im.save("1.jpg")
    

    得到的是什么玩意儿

     先不说这个能不能反色变成二维码,就这个画质我估计想扫出来就够呛

    于是换一个思路

    刚好想到了反色,于是我们从二进制数入手,看能否反转,因为正向将二进制转字符串有不可见字符,我们尝试反着来。

    反转之后看能否得到字符串

    注意这里我反转相当于是将二进制数的排序变为了从后往前排

    答案错误。

    继续测试,从头开始将每八位二进制数倒序,得到字符串,成功

    附上python2代码

    (希望转发大佬题解的童鞋是在自己对题目有思考之后才转发的,而不是简单地看一遍题解,感觉自己懂了,这样不会有什么太大的进步,同时也指指自己)

    def bin_to_str(s):
        return ''.join([chr(i) for i in [int(b, 2) for b in s.split(' ')]])
    a = "01101100 00101100 00001100 01101100 10011100 10101100 00001100 10000110 10101100 00101100 10001100 00011100 00101100 01000110 00100110 10101100 01100110 10100110 01101100 01000110 01101100 10100110 10101100 01000110 00101100 11000110 10100110 00101100 11001100 00011100 11001100 01001100"
    a = a.split(' ')
    flag=''
    for i in a:
        test=i[::-1]
        flag+=bin_to_str(test)
    
    print flag
    

      

  • 相关阅读:
    Python(3)---从迭代器到异步IO
    并发访问sqlite数据库出现databse is locked的错误的一个解决办法
    基础概念2
    (已解决)Arduino mega2560 R3插在电脑上没有反应
    <Android 基础(二)> BroadcastReceiver
    unicode字符和多字节字符的相互转换接口
    PHP中XML和数组互相转换的方法
    java网络编程—TCP(1)
    Java EE的十三个技术规范
    <Android 基础(一)> Service
  • 原文地址:https://www.cnblogs.com/Cl0ud/p/12185489.html
Copyright © 2011-2022 走看看