0

我正在为我的 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 = 0to i=4,我们在键(pwd12)中有一个值。虽然这是问题(从我的角度来看):当我们在时i=5,我们没有任何字符留在键中。因此我们会得到一个ÒutOfBounds Exception.

如果我们尝试在没有字符的键中获取字符,怎么可能工作?显然有一些我在算法中看不到的东西,因为它确实有效,否则它不会被使用......

4

1 回答 1

1

这句话key[i % keyLengthInBits]是说“第 i 位钥匙”的一种方式。这并不意味着密钥中的第 i 个条目表示为字节数组,每个字节包含密钥的 8 位。

等效的 C 代码类似于:

int bit = i & keyLengthInBits;
((key[bit / 8] >> (bit % 8)) & 1)
于 2016-05-16T09:43:54.447 回答