Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class Rc4
- {
- private const int N = 256;
- private int[] _sbox;
- private readonly byte[] _seedKey;
- private byte[] _data;
- private int _i, _j;
- public Rc4(byte[] seedKey, byte[] data)
- {
- _seedKey = seedKey;
- _data = data;
- }
- public Rc4(byte[] seedKey)
- {
- _seedKey = seedKey;
- }
- public byte[] Data
- {
- get
- {
- return _data;
- }
- set
- {
- _data = value;
- }
- }
- public byte[] EnDeCrypt()
- {
- Rc4Initialize();
- byte[] cipher = new byte[_data.Length];
- for (int k = 0;k < _data.Length;k++)
- {
- byte x = GetNextKeyByte();
- byte cipherBy = (byte)(_data[k] ^ x);
- cipher[k] = cipherBy;
- }
- return cipher;
- }
- public byte GetNextKeyByte()
- {
- _i = (_i + 1) % N;
- _j = (_j + _sbox[_i]) % N;
- var tempSwap = _sbox[_i];
- _sbox[_i] = _sbox[_j];
- _sbox[_j] = tempSwap;
- var k = _sbox[(_sbox[_i] + _sbox[_j]) % N];
- return (byte)k;
- }
- public void Rc4Initialize()
- {
- Initialize();
- }
- public void Rc4Initialize(int drop)
- {
- Initialize();
- for (var i = 0; i < drop; i++)
- {
- GetNextKeyByte();
- }
- }
- private void Initialize()
- {
- _i = 0;
- _j = 0;
- _sbox = new int[N];
- var key = new int[N];
- for (var a = 0; a < N; a++)
- {
- key[a] = _seedKey[a % _seedKey.Length];
- _sbox[a] = a;
- }
- var b = 0;
- for (var a = 0; a < N; a++)
- {
- b = (b + _sbox[a] + key[a]) % N;
- var tempSwap = _sbox[a];
- _sbox[a] = _sbox[b];
- _sbox[b] = tempSwap;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement