Pythonで16進数の文字列をXORする方法について説明します。この記事は、Python 2とPython 3の両方で動作するコードを提供します。

Python 2でのXOR

Python 2では、文字列をXORするためには、まず文字列をデコードしてバイナリ形式に変換する必要があります。その後、zip()関数を使用して2つのシーケンスをイテレートし、ord()関数で文字を数値に変換します。これは、XOR演算子^が数値にしか適用できないためです。XORした結果を再び文字に戻すためにchr()関数を使用します。

def xor_strings(xs, ys):
    return "".join(chr(ord(x) ^ ord(y)) for x, y in zip(xs, ys))

a = "32510ba9a7b2bba9b8005d43a304b5714cc0bb0c8a34884dd91304b8ad40b62b07df44ba6e9d8a2368e51d04e0e7b207b70b9b8261112bacb6c866a232dfe257527dc29398f5f3251a0d47e503c66e935de81230b59b7afb5f41afa8d661cb"
b = "32510ba9babebbbefd001547a810e67149caee11d945cd7fc81a05e9f85aac650e9052ba6a8cd8257bf14d13e6f0a803b54fde9e77472dbff89d71b57bddef121336cb85ccb8f3315f4b52e301d16e9f52f90"

binary_a = a.decode("hex")
binary_b = b.decode("hex")

xored = xor_strings(binary_a, binary_b).encode("hex")

Python 3でのXOR

Python 3では、文字列はUnicodeオブジェクトであり、16進数の文字列はメモリ内の整数のバイナリ表現に対応していません。そのため、まず文字列を16進数の整数として解釈し、それらをXORします。その結果を再び16進数の文字列に変換します。

string1 = "95274DE03C78B0BD"
string2 = "48656c6c6f20576f"

xored = hex(int(string1, 16) ^ int(string2, 16))[2:]

この記事がPythonで16進数の文字列をXORする方法についての理解を深めるのに役立つことを願っています。

投稿者 admin

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です