0x14 decode(),encode()

Author Avatar
张Mini Nov 19, 2018
  • Read this article on other devices

python2、3中的编码问题

在做一道逆向的CRC32爆破的题中遇到了一个问题

在使用pyhton2运行下面代码的时候可以成功运行

  • if binascii.crc32(flag+t)&0xffffffff == crc:

可是在使用python3的时候

  • if(binascii.crc32(flag+t) == crc):

却遇到了如下问题

  • TypeError: a bytes-like object is required, not ‘str’

后来得知python3的中最重要的新特性大概就是对文本和二进制的作了更清晰的区分

文本总是Unicode,由str表示,而二进制的数据是由bytes表示的

所以需要更改代码

  • if(binascii.crc32((flag+t).encode(encoding = “utf8”)) == crc):

或者

  • if(binascii.crc32((flag+t).encode(encoding = “gb2313”)) == crc):

或者说

  • if(binascii.crc32((flag+t).encode(“UTF-8”)) == crc):

这样程序运行就不会报错了