我正在为DCPU-16写入RC4,但在开始之前我有一些问题。为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-255从0-65535。而K需要为0-65535,那么处理这个问题的最佳方法是什么?
我看到的选项(和他们的问题)是:
- 还在用
Mod 255
到处填充级联两轮输出(需要更长的时间来运行,我想保持我的CPB尽可能低) - 调整RC4所以
K
将是一个16位的数字,同时还使用长度为255的数组,S[]
(我想做的密码正确,所以我很担心犯错误与RC4修修补补。)
我最好的选择是什么?我觉得我可能不得不做第一名,但我希望这里的人能给我灌输信心让我做第三名。
为什么不使用'AND 255'?这几乎是它的目的。 – harold 2012-04-13 20:12:24
*“(我想做加密权利,所以我很担心在RC4中犯的错误)”* - 别担心,你会*犯错误。例如,尽管我们尽了最大的努力,但我保证您的第一个版本将遭受[时间偏向频道攻击](http://en.wikipedia.org/wiki/Timing_attack)。既然你实际上并没有使用它来做任何重要的事情,那很好 - 这将是一次很好的学习体验:) – 2012-04-13 20:20:05