1

16 進数で記述された XOR 暗号化バイトのリスト (「cipher.txt」に含まれ、1 行に 1 バイト) があり、使用される XOR キーが 1 バイトであることを知っています。したがって、私は次のようなブルー​​ト フォース アプローチを試みています。

f = open("cipher.txt", "r")
ciphers = f.readlines()
f.close

for x in range(0, 255):
    key = bin(int(x))[2:]
    for line in ciphers:
        w = bin(int(line, 16))[2:]
        y = int(w)
        z = y ^ x
    print chr(z),
print ""

そこで、私の結果 (z) はバイナリのままではありません。代わりに、「10010084」のよ​​うな結果が得られます。「y = int(w)」の部分を使用しないと、「unsupported operand type(s) for ^: 'str' and 'int'」というエラーが表示されますが、理由はわかりませんが、変数の定義は機能する「キー」変数に似ているためです。

私のコードには、失敗の原因となる大きな間違いが 1 つあります。誰でもアドバイスできますか?

4

1 に答える 1

1

これを試して:

y = int(w, base=2)

また、あなたは閉じていませんf

f.close()

開いているファイルを管理するには、コンテキスト マネージャーを使用することをお勧めします。

with open("cipher.txt", "r") as f:
    ciphers = f.readlines()
于 2012-06-22T09:51:32.753 に答える