2012-06-22 39 views
1

我有一個以十六進制編寫的XOR加密字節列表(包含在「cipher.txt」中,每行一個字節),我知道使用的XOR鍵是一個字節。因此,我正在嘗試這樣的蠻力方法:Python中的異或錯誤(2.7)

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)」部分,我會得到「不支持的操作數類型爲^:'str'和'int'」作爲錯誤,即使我不明白爲什麼,因爲變量的定義與工作的「關鍵」變量類似。

我懷疑在我的代碼中有一個非常愚蠢的錯誤導致它失敗。 任何人都可以建議嗎?

+0

@cval謝謝你非常喜歡這個技巧。 – fragman

回答

1

試試這個:

y = int(w, base=2) 

你也沒有關閉f

f.close() 

我建議,爲了管理打開的文件使用情況管理器:

with open("cipher.txt", "r") as f: 
    ciphers = f.readlines()