我试图从这个 web中理解 Spritz 或类似 RC4 的内容。我想用 C# 实现 Spritz。Spritz 将k和w添加到与 RC4 不同的算法中。我不确定如何实现它。我尝试像这样从 RC4 编辑代码。
class RC4Class
{
public static string RC4(string input , string key)
{
StringBuilder result = new StringBuilder();
int x, y, j = 0 , k=0 , z =0 ;
int[] box = new int[256];
for(int i = 0; i < 256; i++)
{
box[i] = i;
}
for(int i=0; i<256 ; i++)
{
j = (key[i % key.Length] + box[i] + j) % 256;
x = box[i];
box[i] = box[j];
box[j] = x;
}
for(int i = 0; i < input.Length; i++)
{
//RC4 Code
/* y = i % 256;
j = (box[y] + j) % 256;
//swap
x = box[y];
box[y] = box[j];
box[j] = x;
//XOR
z = box[(box[y] + box[j]) % 256];
result.Append((char)(input[i] ^ z)); */
//Spritz
y = i % 256;
j = k + box[(box[y] + box[j]) % 256] ;
x = box[y];
box[y] = box[j];
box[j] = x;
z = box[ j + box[(y + box[z+k]) % 256]];
result.Append((char)(input[i] ^ z));
}
return result.ToString();
}
}
当我运行此代码时,它会显示这样的错误。
RC4CSharp.exe 中发生了“System.IndexOutOfRangeException”类型的未处理异常
请帮助我如何用任何语言实现 Splitz。