3

私はPythonでいくつかのファズテストを作成しています.バイナリ文字列を指定して、いくつかのビットをランダムに反転し、例外が正しく発生することを確認したり、特定の有効なバイナリのわずかな変更に対して結果が正しく表示されたりすることは非常に貴重です. . Pythonでこれを行う方法を知っている人はいますか? これは低レベル言語ではかなり些細なことですが、仕事上の理由からPythonでこれを行うように言われましたが、これを開始する方法やPythonで何かのバイナリ表現を取得する方法がわかりません. これらのファズ テストを Python で実行する方法について何かアイデアはありますか?

4

2 に答える 2

3

文字列は不変であるため、変更を加えるには、おそらく最初にリストに変換する必要があります。同時に、操作を容易にするために数字を int に変換できます。

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

次に、任意の 16 進数の個々のビットを反転できます。

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

必要に応じて、16 進数に戻すことができます。

result = "".join("0123456789abcdef"[val] for val in values)
于 2013-06-28T16:53:40.890 に答える
2

試してみることのできることの 1 つは、文字列をバイト配列に変換してから、各文字に対してビット操作を実行することです。各文字にインデックスでアクセスし、整数として扱うことができます。

例えば:

>>> 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 でのビット操作をより詳細に説明し、役立つヒントやコツを満載しています。

于 2013-06-28T15:47:15.283 に答える