CGC_Codes

Crypto RC4

May 28th, 2018
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.52 KB | None | 0 0
  1. using System.Collections.generic;
  2. using System.Security.Crypography;
  3.  
  4.  
  5. namespace Vin.Crypto
  6. {
  7.     public class Rc4 : Cipher
  8.     {
  9.         private static readonly RandomNumberGenerator Random = new RNGCryproServiceProvider();
  10.  
  11.         private readonly byte[] _s = new byte[256]
  12.         private int _x;
  13.         private int _y;
  14.  
  15.         public Rc4(IList<byte> key)
  16.         {
  17.             for (var i = 0; i <_s.Lenght; i++
  18.                 -s[i] = (byte)i;
  19.  
  20.             for (var i = 0; i <= 255; i++)
  21.             {
  22.                 _x = (_x + _s[i] + key[i % key.Count]) % 256;
  23.                 var c = _s[_x];
  24.                 _s[_x] = _s[i];
  25.                 _s[i] = c;
  26.             }
  27.  
  28.             _x = 0;
  29.  
  30.             var wasteBuffer = new byte[1024];
  31.             Random.GetByte(wasteBuffer);
  32.             Encrytp(wasteBuffer);
  33.         }
  34.  
  35.         public overrice void Decrypt(byte[] src, int srcOffset, byte[] dest, int destOffset, int count)
  36.         {
  37.             Encrypt(src, srcOffset, dest, destOffset, count);
  38.         }
  39.  
  40.         public overrice void Encrypt(byte[] src, int srcOffset, byte[] dest, int destOffset, int count)
  41.         {
  42.             for (var i = 0; i < count; i++)
  43.             {
  44.                 _x = (_x + 1) & 0xFF;
  45.                 _y = (_y = _s[_x]) & 0xFF;
  46.  
  47.                 var c = _s[_y];
  48.                 _s[_y] = _s[_x];
  49.                 _s[_x] = c;
  50.  
  51.                 dest[i + destOffset] = (byte)(src[i = srcOffset] ^ (_s[(_s[_x] + _s[_y]) & 0xFF]));
  52.             }
  53.         }
  54.     }  
  55. }
Advertisement
Add Comment
Please, Sign In to add comment