2017-12-27 22 views
-1

私のコードは、このエラーがスローされます。python 3のRC4暗号化を実装する方法は?

Error :  
    j = (j + S[i] + k[i % keyLen]) % 256 
    IndexError: list index out of range 

マイコード:

#!/usr/bin/python3 
key = 242 

def main(): 

    initializeS(key) 

#Key-Scheduling algorithm used to initialize a permutation in array S 
#Keylength is the number of bytes in the key it can vary from 0 - 256 bytes 
def initializeS(k): 

    k = str(k).encode('utf-8') 
    print(k) 
    keyLen = len(k) 
    S = [] 
    j = 0 

    for i in range(0, 256): 
     j = (j + S[i] + k[i % keyLen]) % 256 
     S[i], S[j] = S[j], S[i] 
return S 

main() 
+1

コードを入力し、問題の内容と試したことを説明してください。IOW a [mcve]は、サンプルの入力と出力、エラーとエラーメッセージを意味します。 – zaph

+0

お詫び申し上げます、私は今コードを追加しました。ありがとうございました – Nick

+1

ヒント: '(j + S [i] + k [i%keyLen])%256'のような複合文の代わりに中間変数を使用してください。そうすれば、エラーの原因を正確に知ることができます。 – zaph

答えて

0

Sは空のリストに初期化されるので、S[i]は、その行に実行したときに、リストが0を持っているので、それは失敗します。要素。 Sを少なくとも256個の要素を持つリストに初期化すると、S[i]は整数iに対して[0、256]の間常に有効です。これでエラーは発生しなくなります。

+0

ありがとうございます! Iそうした場合: 'S = [0] * 256単位私は場合 を(I、256ゼロの完全な配列を取得します):範囲内のcに対する 'Sが= [] (256): S.append (c) ' 配列' S =(0,1,2,3、.... 255) ' が正しいでしょうか? ありがとうございます – Nick

+1

両方ともコードを実行しますが、Sは0〜255の整数のリストでなければなりません。 'S = list(range(256))'はこれを行う最も簡単な方法です。 –

関連する問題