【发布时间】:2023-04-08 22:30:01
【问题描述】:
最终目标是翻转位置 X 的最后一位字节。假设我们从网站中的一个字符串开始,我们对其进行 base64 解码,以便我们可以使用它:
IV = "2RDs+xm/AxtYj+XViJmBPQ=="
IV = base64.b64decode(IV)
这给了我们一些看起来像 (����X��Ո��=) 的东西,看起来像垃圾,但我们可以使用它。处理此问题的最佳方法是将其放入列表中。
woop = list(IV)
假设在此示例中,我们希望在第 2 个字节处翻转最后一位。 Python 从零开始计数,因此我们需要将计数器减 1。否则,我们会将程序指向第 3 个字节!翻转任何你 XOR 1 的东西。现在这是我的问题......
CounterX = CounterX - 1
woop[CounterX] = chr(ord(IV[CounterX]) ^ 1)
woop = "".join(woop)
IV = woop
我很确定这会翻转整个字节。如何告诉它只翻转 IV[CounterX] 字节的最后一位?
【问题讨论】:
-
你认为为什么会翻转整个字节?
-
不,
^ 1只会翻转一个字节的最低有效位。如果之前的值是 255,那么现在是 254。 -
@MartijnPieters 哈哈,我的答案很好......并在评论中:P
print bin(0xff ^ 0x01) -
我目前的理解是,一旦你使用 base64 解码,你看到的是字节,而不是位。
-
@OneManRiot: OP 在第三个字节中翻转一位。