2013-10-21 184 views
0

我正在用Python編寫一個程序,它將採用二進制代碼片段並根據一個密鑰對其進行加密。如果代碼片段比密鑰短,它必須取得密鑰的最後一位,因此是雙反。當我嘗試將最後一個關鍵字添加到空白列表時,我的問題就出現了,它給了我「列表索引超出範圍」的錯誤。代碼如下:「列表索引超出範圍」錯誤

def OTP(msg,clave): 
encList = [] 
encr = '' 
clist = list(clave) 
clist.reverse() 
cutlist = [] 
mlist = list(msg) 
mlist.reverse() 
for i in range(len(msg)): 
    cutlist.append(clist[i]) 
for i in mlist: 
    for j in cutlist: 
     if i == j: 
      encList.append(0) 
     if 1 != j: 
      encList.append(1) 
encList.reverse() 
for i in encList: 
    encr += str(encList[i]) 
return encr 

clave = '000000010011010010001001000110110011001101010011100101010000101100111110000010100000011010010000101100000101100011010110100000100110001011001101101110110101000010000010100101000101101101010010001100001100100010111111111110010011101110010101110100111110000001101111110010000000101011000101111110100100101000110010111001100110011010100011011001101010011111100101' 
msg = '01101000011010000110100001101000' 

cript = OTP(msg,clave) 
rev = OTP(cript,clave) 
print(rev) 

我給它的消息的長度,這應該是更長的鍵的範圍之內的範圍。一如既往,任何幫助將不勝感激。

+0

你在用什麼語言? –

+0

我使用Python(對不起,忘了提及)。我單獨嘗試了一些代碼,並且它們工作正常。 –

+2

_「如果有人想知道如何(或者想要我刪除這個問題),請告訴我。」是的,其中任何一個都很好,謝謝。我只是不想看到一個問題沒有答案:-) – Kevin

回答

0

的問題,通過使用雙for循環,因爲出現給了我一個清單,一些項目等於msg長度的平方,因爲它在cutlist認爲mlist次每個項目的每個項目。

這意味着當第二次調用函數(解密消息並確認程序已工作)時,msg參數比參數clave長得多,因此創建錯誤。要解決這個問題,可以使用一個for作爲參數的range(len(msg))循環,並根據是否爲cutlist[i] == mlist[i]將0或1添加到encr

+0

這只是一個問題的答案,留下的問題,但要確保它沒有得到答覆。對於作者,請接受,創建自己的答案或刪除問題。 –