2015-04-03 69 views
0

我想解決一個問題,我必須解密一個文件。但是我發現了一個障礙。正如你可以在下面的代碼中看到的,我需要做的密鑰和數字47按位異或python

from Crypto.Cipher import AES 
import base64 

l1 = open("./2015_03_13_mohamed.said.benmousa.puerta_trasera.enc", "rb"); 
iv = l1.read(16) 
enc = l1.read() 
l1.close() 

#key = xor beetwen kiv(47) and IV 

key = iv 
for i in range(len(key)): 
    key[i] = key[i]^47 

obj = AES.new(key,AES.MODE_CBC, iv) 
obj1 = obj.decrypt(enc) 

l = open("./ej3.html", "wb").write(obj1) 

之間按位異或當我嘗試,我得到以下錯誤:

TypeError: unsupported operand type(s) for ^: 'str' and 'int' 

我搜索的東西在這裏但我無法得到它。謝謝。

回答

0

,因爲你需要一個int

ascii_code_for_a = ord('a') == 97 #convert a character to an ascii integer 

int2chr = chr(97) == 'a' #convert an ascii code back to a character 

所以只是做

key = list(iv) # first convert it to a list ... strings are unmutable 
for i in range(len(key)): 
    key[i] = chr(ord(key[i])^47) 
+0

這樣做,我得到了一個錯誤:「類型錯誤:‘海峽’對象不支持的項目分配」 – 2015-04-03 17:01:31

+0

字符串不可變...... – 2015-04-03 17:03:56

+0

但問題是'AES.new(key,AES.MODE_CBC,iv)'需要一個字符串作爲第一個參數。我可以將列表轉換爲字符串嗎? – 2015-04-03 17:11:11