我正在为我的 WPF 应用程序在 C# 中实现一个 RC4 算法。
我按照这个pdf说明了算法。
问题是,在 KSA,我们应该这样做:j = (j + S[i] + (int)key[i % keyLengthInBits]) % 256;
。
话虽如此,我不明白这是如何工作的,因为密钥的长度应该从 5 个字符到 32 个字符(40 位到 256 位)。
因此,让我们以 5 个字符的密钥为例(我将使用与上面链接的 pdf 相同的密钥):pwd12。您去获取该位置的密钥i % 40
字符(5 个字符长为 40 位)。前 5 次没问题,因为 from i = 0
to i=4
,我们在键(pwd12)中有一个值。虽然这是问题(从我的角度来看):当我们在时i=5
,我们没有任何字符留在键中。因此我们会得到一个ÒutOfBounds Exception
.
如果我们尝试在没有字符的键中获取字符,怎么可能工作?显然有一些我在算法中看不到的东西,因为它确实有效,否则它不会被使用......