挺有意思的雜項,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