Пример #1
0
 public RC4(byte[] key)
 {
     _table = new int[256];
     for (int i = 0; i < 256; i++)
     {
         _table[i] = i;
     }
     for (int j = 0, x = 0; j < _table.Length; j++)
     {
         x += _table[j];
         x += key[j % key.Length];
         x %= _table.Length;
         IStreamCipher.Swap <int>(j, x, _table);
     }
 }
Пример #2
0
        public void Process(ReadOnlySpan <byte> data, Span <byte> parsed)
        {
            for (int k = 0; k < data.Length; k++)
            {
                _i++;
                _i %= _table.Length;
                _j += _table[_i];
                _j %= _table.Length;

                IStreamCipher.Swap <int>(_i, _j, _table);
                int rightXOR = _table[_i] + _table[_j];
                rightXOR = _table[rightXOR % _table.Length];

                parsed[k] = (byte)(data[k] ^ rightXOR);
            }
        }