我正在为 DCPU-16 编写 RC4,但是在开始之前我有一些问题。
RC4算法:
//KSA
for i from 0 to 255
S[i] := i
endfor
j := 0
for i from 0 to 255
j := (j + S[i] + key[i mod keylength]) mod 256
swap values of S[i] and S[j]
endfor
//PRGA
i := 0
j := 0
while GeneratingOutput:
i := (i + 1) mod 256
j := (j + S[i]) mod 256
swap values of S[i] and S[j]
K := S[(S[i] + S[j]) mod 256]
output K
endwhile
由于我正在使用 16 位字,因此每个元素的S[]
范围都可以是 0-65535,而不是预期的 0-255。K 需要为 0-65535,处理这个问题的最佳方法是什么?
我看到的选项(及其问题)是:
- 仍然
Mod 255
在任何地方使用并用连接的两轮填充输出(运行时间更长,我想保持我的CPB尽可能低) - 调整 RC4 所以
K
将是一个 16 位的数字,同时仍然使用长度为 255 的数组S[]
(我想做正确的加密,所以我担心在修补 RC4 时会出错。)
我最好的选择是什么?我觉得我可能必须做#1,但我希望这里的人们能给我灌输信心去做#3。