RC4算法实现中KSA(密钥调度算法)出现列表索引越界问题求解
问题原因
你的代码存在两个核心错误,索引越界由第一个错误直接导致:
- 索引掩码计算错误:你在计算j的取值时使用了
& 256,该运算的结果只能是0或256。而S数组长度为256,合法索引范围是0~255,当j取值为256时访问S[j]就会触发列表索引越界异常。正确的掩码应为& 255(等价于模256运算),保证j的取值始终落在合法索引区间内。 - 循环遍历范围错误:RC4的KSA算法需要遍历S盒的全部256个位置,你使用的
range(0,255)只会遍历0~254共255个值,缺失了i=255的处理步骤,会导致最终生成的S盒不符合RC4规范。
修正后代码
def KSA(key): key_length = len(key) S = list(range(256)) j = 0 for i in range(256): j = (j + S[i] + key[i % key_length]) & 255 print(S[i], S[j]) S[i], S[j] = S[j], S[i] # 交换元素 return S
测试时传入key = [5]即可正常运行,不会触发越界错误。
内容的提问来源于stack exchange,提问作者Novice_coder123
相关产品推荐
相关产品推荐

