如何为python 3实现RC4加密?

如何为python 3实现RC4加密?

问题描述:

我的代码引发此错误:如何为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

S被初始化为空列表,所以当S[i]执行该行上,它会因为列表中有0失败元素。将S初始化为至少包含256个元素的列表,因此S[i]对于[0,256)之间的整数i始终有效,并且不会再出现错误。

+0

谢谢你的回答! 如果我: 'S = [0] * 256'(I将得到一个阵列充满256个零) 如果我做: 'S = [] 在范围C(256): S.append (c)' 我将得到数组'S =(0,1,2,3,.... 255)' 哪一个是正确的? 谢谢 – Nick

+1

两者都会使代码执行,但S应该是从0到255的整数列表(包括0和255)。 'S = list(range(256))'是最简单的方法。 –