1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- using System;
- public class XOR128
- {
- public XOR128(int x_)
- {
- this.x = (ulong)(471283569 + x_);
- }
- public uint next()
- {
- ulong num = this.x ^ this.x << 11;
- this.x = this.y;
- this.y = this.z;
- this.z = this.w;
- return (uint)(this.w = (this.w ^ this.w >> 19 ^ (num ^ num >> 8)));
- }
- public static byte[] DECO(byte[] bo, int seed = 555)
- {
- int num = bo.Length;
- byte[] array = new byte[num];
- XOR32 xor = new XOR32(311 + bo.Length);
- for (int i = 0; i < num - 1; i++)
- {
- array[i] = (bo[i + 1] ^ (byte)xor.next());
- }
- XOR128 xor2 = new XOR128(seed + num - 1);
- int num2 = num - 1;
- for (int j = 0; j < num2; j++)
- {
- uint num3 = (uint)((ulong)xor2.next() % (ulong)((long)num2));
- byte b = array[j];
- array[j] = array[(int)((UIntPtr)num3)];
- array[(int)((UIntPtr)num3)] = b;
- }
- XOR32 xor3 = new XOR32(seed + num - 1);
- byte[] array2 = new byte[num - 1 - 1];
- for (int k = 0; k < array2.Length; k++)
- {
- array2[k] = (array[k + 1] ^ (byte)xor3.next());
- }
- bo = null;
- return array2;
- }
- public static byte[] ENCO(byte[] b_, int seed = 555)
- {
- byte[] array = new byte[b_.Length + 1];
- XOR32 xor = new XOR32(seed + array.Length);
- array[0] = 1;
- for (int i = 0; i < b_.Length; i++)
- {
- array[i + 1] = (b_[i] ^ (byte)xor.next());
- }
- XOR128 xor2 = new XOR128(seed + array.Length);
- int num = array.Length;
- uint[] array2 = new uint[num];
- for (int j = 0; j < array.Length; j++)
- {
- array2[j] = (uint)((ulong)xor2.next() % (ulong)((long)num));
- }
- for (int k = num - 1; k >= 0; k--)
- {
- byte b = array[k];
- array[k] = array[(int)((UIntPtr)array2[k])];
- array[(int)((UIntPtr)array2[k])] = b;
- }
- byte[] array3 = new byte[array.Length + 1];
- XOR32 xor3 = new XOR32(311 + array3.Length);
- for (int l = 0; l < array.Length; l++)
- {
- array3[l + 1] = (array[l] ^ (byte)xor3.next());
- }
- array3[0] = 1;
- return array3;
- }
- private ulong x;
- private ulong y = 362436069UL;
- private ulong z = 521288629UL;
- private ulong w = 88675123UL;
- }
|