【发布时间】:2016-05-16 07:14:55
【问题描述】:
我正在 C# 中为我的 WPF 应用程序实现 RC4 算法。
我按照pdf 说明了算法。
问题是,在 KSA,我们应该这样做:j = (j + S[i] + (int)key[i % keyLengthInBits]) % 256;。
话虽如此,我不明白这是如何工作的,因为密钥的长度应该是 5 个字符到 32 个字符(40 位到 256 位)。
让我们以 5 个字符的密钥为例(我将使用与上面链接的 pdf 相同的密钥):pwd12。你去获取i % 40 位置的密钥字符(5 个字符长是 40 位)。前 5 次没问题,因为从 i = 0 到 i=4,我们在键 (pwd12) 中有一个值。虽然这是问题所在(从我的角度来看):当我们在i=5 时,我们的键中没有任何字符。因此我们会得到一个ÒutOfBounds Exception。
如果我们尝试在没有字符的键中获取一个字符,它是如何工作的?显然有一些我在算法中看不到的东西,因为它确实有效,否则它不会被使用......
【问题讨论】:
-
提示:取模运算符 (
%) 是干什么用的? -
返回除法的余数。因此,它不是以位为单位的 keyLength,而是密钥长度本身。谢谢你让我大开眼界!
-
它是以比特为单位的密钥长度。该表达式的目的是选择密钥的一位。看我的回答。
标签: c# algorithm cryptography rc4-cipher