0

我试图从这个 web中理解 Spritz 或类似 RC4 的内容。我想用 C# 实现 Spritz。Spritz 将kw添加到与 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。

4

1 回答 1

0

请帮助我如何用任何语言实现 Splitz。

在 VBA 中查看这个示例(不是最初要求的 C# 中的示例),但这对我来说很好......

...将其转换为 C# 应该不会太难。

于 2022-02-15T12:23:35.733 回答