私は 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 ~ 255 ではなく、0 ~ 65535 の範囲に収まります。K は 0 ~ 65535 である必要があります。この問題に対処するための最善の方法は何でしょうか?
私が見るオプション(およびそれらの問題)は次のとおりです。
- どこでも引き続き使用し、連結された 2 つのラウンドを出力に取り込みます (実行に時間がかかるため、 CPBをできるだけ低く
Mod 255
保ちたいと考えています)。 - RC4 を微調整
K
して、長さ 255 の配列を使用しながら 16 ビットの数値になるようにしS[]
ます (暗号化を正しく行いたいので、RC4 をいじる際の間違いが心配です)。
私の最良の選択肢は何ですか?#1をしなければならないかもしれないと感じていますが、ここにいる人々が私に#3をする自信を与えてくれることを願っています.