簡體   English   中英

隨機翻轉python二進制字符串中的位

[英]Randomly flipping bits in a python binary string

我正在python中創建一些模糊測試,對於給定的二進制字符串,隨機翻轉一些位並確保正確引發異常或正確顯示結果對於給定的有效二進制文件進行細微改動對我來說是非常寶貴的。 有誰知道我可能會在Python中做什么? 我意識到這在較低級的語言中是微不足道的,但是由於工作原因,我被告知要在Python中執行此操作,但是我不確定如何啟動它,或者無法獲取Python中某些內容的二進制表示形式。 關於如何在Python中執行這些模糊測試的任何想法?

您可以嘗試的一件事是將字符串轉換為字節數組,然后對每個字符執行位操作。 您可以按索引訪問每個字符並將其視為整數。

例如:

>>> a = "hello world"
>>> b = bytearray(a)
>>> b[0] = b[0] ^ 5    # bitwise XOR
>>> print b            # or do str(b) to convert it back to a string
mello world

您可能還會在Python Wiki上發現有關位操作的這篇文章很有用。 它超越了Python中的位操作,以及更多有用的技巧和竅門。

字符串是不可變的,因此要進行更改,第一件事可能就是將其轉換為列表。 同時,您可以將數字轉換為整數,以更輕松地進行操作。

hexstring = "1234567890deadbeef"
values = [int(digit, 16) for digit in hexstring]

然后,您可以翻轉任意十六進制數字中的單個位。

digitindex = 2
bitindex = 3
values[digitindex] ^= 1 << bitindex

如果需要,您可以將其轉換回十六進制。

result = "".join("0123456789abcdef"[val] for val in values)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM