代码之家  ›  专栏  ›  技术社区  ›  OneManRiot

翻转字节中的最后一位

  •  2
  • OneManRiot  · 技术社区  · 11 年前

    最终目标是在X位置翻转最后一位字节。假设我们从一个网站的字符串开始,我们对其进行base64解码,这样我们就可以使用它:

    IV = "2RDs+xm/AxtYj+XViJmBPQ=="
    IV = base64.b64decode(IV)
    

    这给了我们一些看起来像(X=)的东西,看起来像垃圾,但这是我们可以处理的东西。处理此问题的最佳方法是将其列在列表中。

    woop = list(IV)
    

    在这个例子中,我们要翻转第2字节的最后一位。Python从零开始计数,因此我们需要将计数器减少1。否则,我们将把程序指向第三个字节!要翻转任何东西,请将其“异或”为1。现在是我的问题。。。

    CounterX = CounterX - 1
    woop[CounterX] = chr(ord(IV[CounterX]) ^ 1)
    woop = "".join(woop)
    IV = woop
    

    我很确定这会翻转整个字节。我怎么能告诉它在IV[CounterX]处只翻转字节的最后一位?

    1 回复  |  直到 11 年前
        1
  •  2
  •   Joran Beasley    11 年前
    • base64.decode 返回字符串
    • python2x中的字符串始终是字节!
      • 如果您正在使用python3,您可能需要调用 bytes(IV) 以确保8位块。。。但我不确定我不怎么用蟒蛇
    • some_int XOR 1将仅翻转最低字节
      • print bin(0xff ^ 0x01)

    所以我们再次回到什么让你认为这不是你看到的行为?你能给我们举个例子来说明这个问题吗?