Xor() public method

public Xor ( BitArray value ) : BitArray
value BitArray
return BitArray
示例#1
0
 static void Main(string[] args)
 {
     var bits = new BitArray(2);
     bits[1] = true;
     bits.Xor(bits); // Bitwise exclusive-OR bits with itself
     Console.WriteLine(bits[1]); // False
 }
示例#2
0
文件: Xor.cs 项目: Helen1987/edu
		public static byte[] Xor(byte[] value1, byte[] value2) {
			var array1 = new BitArray(value1);
			var array2 = new BitArray(value2);
			var result = array1.Xor(array2);
			byte[] b = new byte[result.Count / 8];
			result.CopyTo(b, 0);
			return b;
		}
示例#3
0
        public static BitArray Clean(BitArray depthMap, int depthWidth, byte[] video, int videoWidth)
        {
            BitArray orig = new BitArray(depthMap);

            // find the border: grow, extract the difference, grow again.
            const int growthSize = 2;
            var grownMap = Dilate(depthMap, depthWidth, growthSize);
            var border = Dilate(depthMap.Xor(grownMap), depthWidth, growthSize + 1);

            // get a more accurate picture by filtering by video
            var filteredBorder = FilterByVideo(border, depthWidth, video, videoWidth);
            var enhancedMap = (filteredBorder == null) ? orig : border.Not().Or(filteredBorder).And(grownMap);
            return RemoveNoise(enhancedMap, depthWidth);
        }
 static public int Xor(IntPtr l)
 {
     try {
         System.Collections.BitArray self = (System.Collections.BitArray)checkSelf(l);
         System.Collections.BitArray a1;
         checkType(l, 2, out a1);
         var ret = self.Xor(a1);
         pushValue(l, true);
         pushValue(l, ret);
         return(2);
     }
     catch (Exception e) {
         return(error(l, e));
     }
 }
示例#5
0
 void DecryptionCBC()
 {
     var key = Encoding.GetEncoding(1251).GetBytes(Key.ToString().PadLeft(8, '0'));
     GenerationKey(new BitArray(key));
     AddTempBit(BitArrayET);
     BitArrayDT = new BitArray(BitArrayET.Length);
     BitArray C = new BitArray(PSCh());
     for (var i = 0; i < BitArrayET.Length; i += 64)
     {
         var aBitEncrypt = GetValue(BitArrayET, i, i + 64);
         var aBitDecryption = base.Decryption(new BitArray(aBitEncrypt));
         var M = C.Xor(aBitDecryption);
         C = aBitEncrypt;
         Concat(BitArrayDT, M, i);
     }
 }
        /// <summary>
        /// Xors the 2 component.
        /// </summary>
        /// <param name="compA">Component.</param>
        /// <param name="compB">Component.</param>
        /// <returns>Xor result as string</returns>
        public string XOR(string compA, string compB = null)
        {
            if (compB == null)
            {
                compB = ReverseString(compA);
            }

            var barA = new BitArray(HexToByte(compA));
            var barB = new BitArray(HexToByte(compB));
            var barC = new BitArray(compA.Length);
            barC = barB.Xor(barA);
            var byteC = new byte[barC.Length / 8];
            barC.CopyTo(byteC, 0);

            return ByteToHex(byteC);
        }
        private Valor XOR(Valor llave1, Valor llave2)
        {
            byte[] llaveArray1 = ASCIIEncoding.ASCII.GetBytes(llave1.ToString());
            byte[] llaveArray2 = ASCIIEncoding.ASCII.GetBytes(llave2.ToString());

            BitArray bitArray1 = new BitArray(llaveArray1);
            BitArray bitArray2 = new BitArray(llaveArray2);

            BitArray bitArrayResultado=bitArray1.Xor(bitArray2);

            byte[] llaveArrayResultado = ToByteArray(bitArrayResultado);

            string resultado = Convert.ToBase64String(llaveArrayResultado, 0, llaveArrayResultado.Length);

            return new Caracter(resultado);
        }
示例#8
0
        static void BitArrayDemo()
        {
            var bits1 = new BitArray(8);
            bits1.SetAll(true);
            bits1.Set(1, false);
            bits1[5] = false;
            bits1[7] = false;
            Console.Write("initialized: ");
            DisplayBits(bits1);
            Console.WriteLine();

            DisplayBits(bits1);
            bits1.Not();
            Console.Write(" not ");
            DisplayBits(bits1);
            Console.WriteLine();

            var bits2 = new BitArray(bits1);
            bits2[0] = true;
            bits2[1] = false;
            bits2[4] = true;
            DisplayBits(bits1);
            Console.Write(" or ");
            DisplayBits(bits2);
            Console.Write(" : ");
            bits1.Or(bits2);
            DisplayBits(bits1);
            Console.WriteLine();

            DisplayBits(bits2);
            Console.Write(" and ");
            DisplayBits(bits1);
            Console.Write(" : ");
            bits2.And(bits1);
            DisplayBits(bits2);
            Console.WriteLine();

            DisplayBits(bits1);
            Console.Write(" xor ");
            DisplayBits(bits2);
            bits1.Xor(bits2);
            Console.Write(" : ");
            DisplayBits(bits1);
            Console.WriteLine();
        }
示例#9
0
        public CodedPiece CodeSegments()
        {
            List<int> pieceBuilders = new List<int>() { firstSegment.SegmentNumber };
            BitArray xoredBits = new BitArray(firstSegment.Data);

            foreach (FileSegment segment in segments.Skip(1))
            {
                var currentBits = new BitArray(segment.Data);
                xoredBits = xoredBits.Xor(currentBits);
                pieceBuilders.Add(segment.SegmentNumber);
            }

            return new CodedPiece()
            {
                BasedOnSegments = pieceBuilders,
                CodedWord = xoredBits
            };
        }
示例#10
0
文件: Utils.cs 项目: vebin/soa
        /// <summary>
        /// Bitwise XOR for 2 Bytes.
        /// </summary>
        /// <param name="t1">Left side for comparison</param>
        /// <param name="t2">Right side for comparison</param>
        /// <returns>Resulting byte</returns>
        static internal byte BitwiseXOR(byte t1, byte t2)
        {
            BitArray baLft = null;
            BitArray baRght = null;
            BitArray baXor = null;

            //Have to use Byte Arrays as the constructor for the BitArray, otherwise the 
            //integer value of the current byte is used to set the length of the bitArray instead of the value.
            byte[] bytL = new byte[1];
            byte[] bytR = new byte[1];

            bytL[0] = t1;
            bytR[0] = t2;
            baLft = new BitArray(bytL);
            baRght = new BitArray(bytR);
            baXor = baLft.Xor(baRght);

            byte[] ba2BytArr = new byte[8];

            baXor.CopyTo(ba2BytArr, 0);

            return ba2BytArr[0];
        }
示例#11
0
        private bool PrefixesEquals(CidrRange other)
        {
            var leftMask = new BitArray(Prefix);
            var leftSuffix = new BitArray(32, false);
            for (int i = 31; i >= 32 - Suffix; i--)
            {
                leftSuffix[i] = true;
            }
            leftMask = leftSuffix.And(leftMask);

            var rightMask = new BitArray(other.Prefix);
            var rightSuffix = new BitArray(32, false);
            for (int i = 31; i >= 32 - other.Suffix; i--)
            {
                rightSuffix[i] = true;
            }
            rightMask = rightSuffix.And(rightMask);

            var result = rightMask.Xor(leftMask);
            return result.Cast<bool>().ToArray().Skip(32 - Math.Min(Suffix, other.Suffix)).All(x => !x);
        }
示例#12
0
        /// <summary>
        /// Шифруем строку, используя двоичные данные ключа. Данные ключа должны быть длиннее чем сообщение
        /// </summary>
        /// <param name="message"></param>
        /// <param name="keyData"></param>
        /// <returns></returns>
        public static String Encode(String message, byte[] keyData)
        {
            // Проверяем длину данных ключа
            if (message.Length > keyData.Length)
                throw new ArgumentException("Insufficient Key Data");

            // Используем кодировку ASCII, чтобы получить массив байтов из строки сообщения
            byte[] msgBytes = Encoding.ASCII.GetBytes(message);
            byte[] trimData = new byte[msgBytes.Length];

            // Оба битовых  массива должны быть одной длины, копируем необходимое количество байт из массива ключевых данных
            Array.Copy(keyData, trimData, trimData.Length);

            // Создаем массив битов из данных сообщения и ключевых данных
            BitArray msg = new BitArray(msgBytes);
            BitArray key = new BitArray(trimData);

            // Выполняем операцию XOR на двух массивах
            BitArray output = msg.Xor(key);

            // Копирует массив вывода в массив сообщения
            output.CopyTo(msgBytes, 0);

            // Используем кодировку base-64 чтобы преобразовать двоичные данные в печатаемую строку
            return Convert.ToBase64String(msgBytes);
        }
示例#13
0
        /// <summary>
        /// Расшифровываем зашифрованную строку
        /// </summary>
        /// <param name="message"></param>
        /// <param name="keyData"></param>
        /// <returns></returns>
        public static string Decode(String message, byte[] keyData)
        {
            // Восстанавливаем оригинальные байты из строки с кодировкой base-64
            byte[] msgBytes = Convert.FromBase64String(message);
            byte[] trimData = new byte[msgBytes.Length];

            // Копируем необходимое число байтов из ключа
            Array.Copy(keyData, trimData, trimData.Length);

            // Выполняем xor на двоичных данных, чтобы восстановить начальные биты
            BitArray msg = new BitArray(msgBytes);
            BitArray key = new BitArray(trimData);
            BitArray output = msg.Xor(key);

            // Копируем переведенные биты в массив сообщения
            output.CopyTo(msgBytes, 0);

            // Воспроизводим изначальную строку используя ASCII декодирование
            return Encoding.ASCII.GetString(msgBytes);
        }
示例#14
0
        /// <summary>
        ///     DES一轮加密
        /// </summary>
        /// <param name="p"></param>
        /// <param name="ki"></param>
        /// <returns></returns>
        private static RoundPackage Round(RoundPackage p, BitArray ki)
        {
            RoundPackage next = new RoundPackage(p.RoundID + 1);
            //扩展/置换
            BitArray exR = new BitArray(48);
            for (int i = 0; i < 48; i++)
            {
                //扩展32位至48位
                //E的值从1开始
                exR[i] = p.R[E[i] - 1];
            }

            //XOR
            var s = exR.Xor(ki);
            //S盒(48->32)
            s = SBox(s);
            //置换
            s = SwapP(s);
            //XOR
            next.R = s.Xor(p.L);
            next.L = p.R;
            return next;
        }
示例#15
0
        string RenameLetters(string originalName)
        {
            BitArray arr = new BitArray(md5.ComputeHash(Encoding.UTF8.GetBytes(originalName)));

            Random rand = new Random(originalName.GetHashCode() * seed);
            byte[] xorB = new byte[arr.Length / 8];
            rand.NextBytes(xorB);
            BitArray xor = new BitArray(xorB);

            BitArray result = arr.Xor(xor);
            byte[] buff = new byte[result.Length / 8];
            result.CopyTo(buff, 0);

            StringBuilder ret = new StringBuilder();
            int m = 0;
            for (int i = 0; i < buff.Length; i++)
            {
                m = (m << 8) + buff[i];
                while (m > 52)
                {
                    int n = m % 26;
                    if (n < 26)
                        ret.Append((char)('A' + n));
                    else
                        ret.Append((char)('a' + (n - 26)));
                    m /= 52;
                }
            }
            return ret.ToString();
        }
示例#16
0
文件: Form1.cs 项目: RealDishu/lab4
 private BitArray Xor(BitArray arr1, BitArray arr2)
 {
     return arr1.Xor(arr2);
 }
示例#17
0
        private void doLiveoutSets(ProgramBlock<SparcInstruction> start)
        {
            bool changed = false;
            do
            {
                changed = false;

                foreach (var f in start.Functions)
                {
                    if (coloringDone.Contains(f.Name))
                        continue;

                    f.VisitBlocks(b =>
                    {
                        var gset = genSets[b];
                        var kset = killSets[b];
                        var lset = liveoutSets[b];
                        var newLset = new BitArray(numRegs);

                        if (!b.IsReturn)
                        {
                            foreach (var suc in b.Nexts)
                            {
                                var sucKset = killSets[suc as BasicBlock<SparcInstruction>];
                                var sucGset = genSets[suc as BasicBlock<SparcInstruction>];
                                var sucLset = liveoutSets[suc as BasicBlock<SparcInstruction>];
                                var sucSet = new BitArray(numRegs);

                                //do lset - kset
                                sucSet.Or(sucLset).Xor(sucKset).And(sucLset);

                                //do gen union with the above
                                sucSet.Or(sucGset);

                                //union with new lset
                                newLset.Or(sucSet);
                            }
                        }

                        var countingSet = new BitArray(lset);
                        countingSet.Xor(newLset);
                        var countArr = new int[countingSet.IntArraySize()];
                        countingSet.CopyTo(countArr, 0);

                        for (int i = 0; i < countArr.Length; i++)
                        {
                            changed |= countArr[i] != 0;
                        }

                        if (changed)
                        {
                            liveoutSets[b] = newLset;
                        }
                    }, false);
                }
            }
            while (changed);
        }
示例#18
0
 void EncryptionCBC()
 {
     var key = Encoding.GetEncoding(1251).GetBytes(Key.ToString().PadLeft(8, '0'));
     GenerationKey(new BitArray(key));
     AddTempBit(BitArrayOT);
     BitArrayET = new BitArray(BitArrayOT.Length);
     BitArray C = new BitArray(PSCh());
     for (var i = 0; i < BitArrayOT.Length; i += 64)
     {
         var M = GetValue(BitArrayOT, i, i + 64);
         var aBitEncrypted = base.Encryption(new BitArray(C.Xor(M)));
         C = aBitEncrypted;
         Concat(BitArrayET, aBitEncrypted, i);
     }
 }
 private static void AssertBitArraysAreEqual(BitArray actual, BitArray expected)
 {
     // check that these have the same length, and then their XOR is zero.
     Assert.AreEqual(actual.Length, expected.Length);
     var diff = actual.Xor(expected);
     for (int i = 0; i < actual.Length; i++)
         Assert.IsFalse(diff[i]);
 }
示例#20
0
    static object SafeConstants(uint id)
    {
        Dictionary <uint, object> hashTbl;

        if ((hashTbl = AppDomain.CurrentDomain.GetData("PADDINGPADDINGPADDING") as Dictionary <uint, object>) == null)
        {
            AppDomain.CurrentDomain.SetData("PADDINGPADDINGPADDING", hashTbl = new Dictionary <uint, object>());
            MemoryStream stream = new MemoryStream();
            Assembly     asm    = Assembly.GetCallingAssembly();
            using (DeflateStream str = new DeflateStream(asm.GetManifestResourceStream("PADDINGPADDINGPADDING"), CompressionMode.Decompress))
            {
                byte[] dat  = new byte[0x1000];
                int    read = str.Read(dat, 0, 0x1000);
                do
                {
                    stream.Write(dat, 0, read);
                    read = str.Read(dat, 0, 0x1000);
                }while (read != 0);
            }
            AppDomain.CurrentDomain.SetData("PADDINGPADDINGPADDINGPADDING", stream.ToArray());
        }
        object ret;
        uint   x  = (uint)new StackFrame(1).GetMethod().MetadataToken;
        uint   h  = 0x67452301 ^ x;
        uint   h1 = 0x3bd523a0;
        uint   h2 = 0x5f6f36c0;

        for (uint i = 1; i <= 64; i++)
        {
            h = (h & 0x00ffffff) << 8 | ((h & 0xff000000) >> 24);
            uint n = (h & 0xff) % 64;
            if (n >= 0 && n < 16)
            {
                h1 |= (((h & 0x0000ff00) >> 8) & ((h & 0x00ff0000) >> 16)) ^ (~h & 0x000000ff);
                h2 ^= (h * i + 1) % 16;
                h  += (h1 | h2) ^ 12345678;
            }
            else if (n >= 16 && n < 32)
            {
                h1 ^= ((h & 0x00ff00ff) << 8) ^ (((h & 0x00ffff00) >> 8) | (~h & 0x0000ffff));
                h2 += (h * i) % 32;
                h  |= (h1 + ~h2) & 12345678;
            }
            else if (n >= 32 && n < 48)
            {
                h1 += ((h & 0x000000ff) | ((h & 0x00ff0000) >> 16)) + (~h & 0x000000ff);
                h2 -= ~(h + n) % 48;
                h  ^= (h1 % h2) | 12345678;
            }
            else if (n >= 48 && n < 64)
            {
                h1 ^= (((h & 0x00ff0000) >> 16) | ~(h & 0x0000ff)) * (~h & 0x00ff0000);
                h2 += (h ^ i - 1) % n;
                h  -= ~(h1 ^ h2) + 12345678;
            }
        }
        uint pos = h ^ id;

        if (!hashTbl.TryGetValue(pos, out ret))
        {
            using (BinaryReader rdr = new BinaryReader(new MemoryStream((byte[])AppDomain.CurrentDomain.GetData("PADDINGPADDINGPADDINGPADDING"))))
            {
                rdr.BaseStream.Seek(pos, SeekOrigin.Begin);
                byte   type = rdr.ReadByte();
                byte[] f    = rdr.ReadBytes(rdr.ReadInt32());

                Random rand = new Random(12345678 ^ (int)pos);
                byte[] k    = new byte[f.Length];
                rand.NextBytes(k);
                System.Collections.BitArray arr = new System.Collections.BitArray(f);
                arr.Xor(new System.Collections.BitArray(k));
                arr.CopyTo(f, 0);

                if (type == 11)
                {
                    ret = BitConverter.ToDouble(f, 0);
                }
                else if (type == 22)
                {
                    ret = BitConverter.ToSingle(f, 0);
                }
                else if (type == 33)
                {
                    ret = BitConverter.ToInt32(f, 0);
                }
                else if (type == 44)
                {
                    ret = BitConverter.ToInt64(f, 0);
                }
                else if (type == 55)
                {
                    ret = Encoding.UTF8.GetString(f);
                }
                hashTbl[pos] = ret;
            }
        }
        return(ret);
    }
示例#21
0
文件: Iteration.cs 项目: WPiotr/BSK
 public void afterIteration(int iterationIndex)
 {
     BitArray left_side_copy = new BitArray(leftSide[iterationIndex - 1]);
     rightSide[iterationIndex] = left_side_copy.Xor(rightSide[iterationIndex]);
     leftSide[iterationIndex] = rightSide[iterationIndex - 1];
 }
示例#22
0
        static void Main(string[] args)
        {
            // Creates an initializes several BitArrays.
            BitArray myBA1 = new BitArray(5);

            BitArray myBA2 = new BitArray(5, false);

            byte[] myBytes = new byte[5] { 1, 2, 3, 4, 5 };
            BitArray myBA3 = new BitArray(myBytes);

            bool[] myBools = new bool[5] { true, false, true, true, false };
            BitArray myBA4 = new BitArray(myBools);

            int[] myInts = new int[5] { 6, 7, 8, 9, 10 };
            BitArray myBA5 = new BitArray(myInts);

            // Displays the properties and values of the BitArrays.
            Console.WriteLine("myBA1");
            Console.WriteLine("   Count:    {0}", myBA1.Count);
            Console.WriteLine("   Length:   {0}", myBA1.Length);
            Console.WriteLine("   Values:");
            PrintValues(myBA1, 8);

            Console.WriteLine("myBA2");
            Console.WriteLine("   Count:    {0}", myBA2.Count);
            Console.WriteLine("   Length:   {0}", myBA2.Length);
            Console.WriteLine("   Values:");
            PrintValues(myBA2, 8);

            Console.WriteLine("myBA3");
            Console.WriteLine("   Count:    {0}", myBA3.Count);
            Console.WriteLine("   Length:   {0}", myBA3.Length);
            Console.WriteLine("   Values:");
            PrintValues(myBA3, 8);

            Console.WriteLine("myBA4");
            Console.WriteLine("   Count:    {0}", myBA4.Count);
            Console.WriteLine("   Length:   {0}", myBA4.Length);
            Console.WriteLine("   Values:");
            PrintValues(myBA4, 8);

            Console.WriteLine("myBA5");
            Console.WriteLine("   Count:    {0}", myBA5.Count);
            Console.WriteLine("   Length:   {0}", myBA5.Length);
            Console.WriteLine("   Values:");
            PrintValues(myBA5, 8);

            int[] myAntiInts = new int[5] { -1, -1, -1, -1, -1 };
            BitArray myBA6 = new BitArray(myAntiInts);
            Console.WriteLine("myBA6");
            Console.WriteLine("   Count:    {0}", myBA5.Count);
            Console.WriteLine("   Length:   {0}", myBA5.Length);
            Console.WriteLine("   Values:");
            PrintValues(myBA6, 8);

            Console.WriteLine("\nXORing BA5 with BA6...\n");
            BitArray myBA7 = myBA5.Xor(myBA6);
            Console.WriteLine("myBA7");
            Console.WriteLine("   Count:    {0}", myBA5.Count);
            Console.WriteLine("   Length:   {0}", myBA5.Length);
            Console.WriteLine("   Values:");
            PrintValues(myBA7, 8);

            Console.WriteLine("myBA5");
            Console.WriteLine("   Count:    {0}", myBA5.Count);
            Console.WriteLine("   Length:   {0}", myBA5.Length);
            Console.WriteLine("   Values:");
            PrintValues(myBA5, 8);

            Console.WriteLine("myBA6");
            Console.WriteLine("   Count:    {0}", myBA5.Count);
            Console.WriteLine("   Length:   {0}", myBA5.Length);
            Console.WriteLine("   Values:");
            PrintValues(myBA6, 8);

            Console.WriteLine("\nNot on myBA5:\n");
            myBA5.Not();
            Console.WriteLine("myBA5");
            Console.WriteLine("   Count:    {0}", myBA5.Count);
            Console.WriteLine("   Length:   {0}", myBA5.Length);
            Console.WriteLine("   Values:");
            PrintValues(myBA5, 8);
        }
 private BitArray feistelFunction(BitArray keyBits, BitArray Bittext_16)
 {
     BitArray afterParity = Bittext_16;
     if (checkParity(keyBits)) //true if parity is even
     {
         afterParity = Bittext_16.Not();
         //Console.WriteLine("Right after negating : " + BitOperations.getBinaryString(afterParity));
     }
     //Console.WriteLine("Keybits for xoring : " + BitOperations.getBinaryString(keyBits));
     var feistelOutput = keyBits.Xor(new BitArray(afterParity));
     //Console.WriteLine("right 16 bits after fiestal function : " + BitOperations.getBinaryString(a));
     return feistelOutput;
 }
示例#24
0
 BitArray F(BitArray aBite, BitArray Key)
 {
     ExtensionE(ref aBite);
     aBite.Xor(Key);
     BitArray tempBitArray = new BitArray(32);
     var iBlock = 1;
     var iTempBitsBlock = 0;
     for (var i = 0; i < aBite.Length; i += 6)
     {
         SetBits(ref tempBitArray, GammirovaniyeS(GetValue(aBite, i, i + 6), iBlock++), iTempBitsBlock);
         iTempBitsBlock += 4;
     }
     aBite = Permutation(tempBitArray, P);
     return aBite;
 }
示例#25
0
文件: Program.cs 项目: Frosne/SShA
        /// <summary>
        /// Generate one xor round. 
        /// </summary>
        /// <param name="to">Where to put the result</param>
        /// <param name="key">Key used</param>
        /// <param name="counter">Shifter of the key</param>
        private void GenerateOneRound(ref BitArray to, BitArray key, int counter)
        {
            this.ExtendToSizeLeft(ref this.KeyExtended, key, to.Length, counter);
            to = to.Xor(this.KeyExtended);


        }
            public static void BitArray_Helper(Operator op)
            {
                BitArray ba2 = null;
                BitArray ba3 = null;
                BitArray ba4 = null;

                // []  Standard cases (1,1) (1,0) (0,0).
                ba2 = new BitArray(6, false);
                ba3 = new BitArray(6, false);

                ba2.Set(0, true);
                ba2.Set(1, true);

                ba3.Set(1, true);
                ba3.Set(2, true);

                switch (op)
                {
                    case Operator.Xor:
                        ba4 = ba2.Xor(ba3);
                        Assert.True(ba4.Get(0)); //"Err_8! Expected ba4.Get(0) to be true"
                        Assert.False(ba4.Get(1)); //"Err_9! Expected ba4.Get(1) to be false"
                        Assert.True(ba4.Get(2)); //"Err_10! Expected ba4.Get(2) to be true"
                        Assert.False(ba4.Get(4)); //"Err_11! Expected ba4.Get(4) to be false"
                        break;

                    case Operator.And:
                        ba4 = ba2.And(ba3);
                        Assert.False(ba4.Get(0)); //"Err_12! Expected ba4.Get(0) to be false"
                        Assert.True(ba4.Get(1)); //"Err_13! Expected ba4.Get(1) to be true"
                        Assert.False(ba4.Get(2)); //"Err_14! Expected ba4.Get(2) to be false"
                        Assert.False(ba4.Get(4)); //"Err_15! Expected ba4.Get(4) to be false"
                        break;

                    case Operator.Or:
                        ba4 = ba2.Or(ba3);
                        Assert.True(ba4.Get(0)); //"Err_16! Expected ba4.Get(0) to be true"
                        Assert.True(ba4.Get(1)); //"Err_17! Expected ba4.Get(1) to be true"
                        Assert.True(ba4.Get(2)); //"Err_18! Expected ba4.Get(2) to be true"
                        Assert.False(ba4.Get(4)); //"Err_19! Expected ba4.Get(4) to be false"
                        break;
                }


                // []  Size stress cases.
                ba2 = new BitArray(0x1000F, false);
                ba3 = new BitArray(0x1000F, false);

                ba2.Set(0x10000, true); // The bit for 1 (2^0).
                ba2.Set(0x10001, true); // The bit for 2 (2^1).

                ba3.Set(0x10001, true); // The bit for 2 (2^1).

                switch (op)
                {
                    case Operator.Xor:
                        ba4 = ba2.Xor(ba3);
                        Assert.True(ba4.Get(0x10000)); //"Err_20! Expected ba4.Get(0x10000) to be true"
                        Assert.False(ba4.Get(0x10001)); //"Err_21! Expected ba4.Get(0x10001) to be false"
                        Assert.False(ba4.Get(0x10002)); //"Err_22! Expected ba4.Get(0x10002) to be false"
                        Assert.False(ba4.Get(0x10004)); //"Err_23! Expected ba4.Get(0x10004) to be false"
                        break;

                    case Operator.And:
                        ba4 = ba2.And(ba3);
                        Assert.False(ba4.Get(0x10000)); //"Err_24! Expected ba4.Get(0x10000) to be false"
                        Assert.True(ba4.Get(0x10001)); //"Err_25! Expected ba4.Get(0x10001) to be true"
                        Assert.False(ba4.Get(0x10002)); //"Err_26! Expected ba4.Get(0x10002) to be false"
                        Assert.False(ba4.Get(0x10004)); //"Err_27! Expected ba4.Get(0x10004) to be false"
                        break;

                    case Operator.Or:
                        ba4 = ba2.Or(ba3);
                        Assert.True(ba4.Get(0x10000)); //"Err_28! Expected ba4.Get(0x10000) to be true"
                        Assert.True(ba4.Get(0x10001)); //"Err_29! Expected ba4.Get(0x10001) to be true"
                        Assert.False(ba4.Get(0x10002)); //"Err_30! Expected ba4.Get(0x10002) to be false"
                        Assert.False(ba4.Get(0x10004)); //"Err_31! Expected ba4.Get(0x10004) to be false"
                        break;
                }
            }
示例#27
0
        string RenameASCII(string originalName)
        {
            BitArray arr = new BitArray(md5.ComputeHash(Encoding.UTF8.GetBytes(originalName)));

            Random rand = new Random(originalName.GetHashCode() * seed);
            byte[] xorB = new byte[arr.Length / 8];
            rand.NextBytes(xorB);
            BitArray xor = new BitArray(xorB);

            BitArray result = arr.Xor(xor);
            byte[] ret = new byte[result.Length / 8];
            result.CopyTo(ret, 0);

            return Convert.ToBase64String(ret);
        }
            public static void BitArray_XorTest_Negative()
            {
                // []  ArgumentException, length of arrays is different
                BitArray ba2 = new BitArray(11, false);
                BitArray ba3 = new BitArray(6, false);

                Assert.Throws<ArgumentException>(delegate { ba2.Xor(ba3); }); //"Err_37! wrong exception thrown."

                // []  ArgumentNullException, null.
                ba2 = new BitArray(6, false);
                ba3 = null;

                Assert.Throws<ArgumentNullException>(delegate { ba2.Xor(ba3); }); //"Err_38! wrong exception thrown."
            }
示例#29
0
        string RenameUnreadable(string originalName)
        {
            BitArray arr = new BitArray(md5.ComputeHash(Encoding.UTF8.GetBytes(originalName)));

            Random rand = new Random(originalName.GetHashCode() * seed);
            byte[] xorB = new byte[arr.Length / 8];
            rand.NextBytes(xorB);
            BitArray xor = new BitArray(xorB);

            BitArray result = arr.Xor(xor);
            byte[] buff = new byte[result.Length / 8];
            result.CopyTo(buff, 0);

            StringBuilder ret = new StringBuilder();
            int m = 0;
            for (int i = 0; i < buff.Length; i++)
            {
                m = (m << 8) + buff[i];
                while (m > 32)
                {
                    ret.Append((char)(m % 32 + 1));
                    m /= 32;
                }
            }
            return ret.ToString();
        }
 // Pour "mélanger" les bytes des fichiers
 public BitArray crypteS(BitArray b)
 {
     BitArray cle_bit = new BitArray(key);
     //byte[] Kcle = cle(b, key);
     BitArray r = new BitArray(b.Length);
     for (int i = 0; i < b.Length; i++)
     {
         r = cle_bit.Xor(b);
     }
     return r;
 }
示例#31
0
        /// <summary>
        /// Calculates f(<paramref name="a"/>), which is an affine transform (e.g. it's a matrix
        /// multiply followed by a vector add).
        /// </summary>
        /// <param name="a">The byte to apply the transform to.</param>
        /// <returns>The result of F(<paramref name="a"/)</returns>
        private static byte CalculateF(byte a)
        {
            // Visually, b = f(a) is
            //
            // | b7 |   | 1 1 1 1 1 0 0 0 |   | a7 |   | 0 |
            // | b6 |   | 0 1 1 1 1 1 0 0 |   | a6 |   | 1 |
            // | b5 |   | 0 0 1 1 1 1 1 0 |   | a5 |   | 1 |
            // | b4 | * | 0 0 0 1 1 1 1 1 | * | a4 | + | 0 |
            // | b3 |   | 1 0 0 0 1 1 1 1 |   | a3 |   | 0 |
            // | b2 |   | 1 1 0 0 0 1 1 1 |   | a2 |   | 0 |
            // | b1 |   | 1 1 1 0 0 0 1 1 |   | a1 |   | 1 |
            // | b0 |   | 1 1 1 1 0 0 0 1 |   | a0 |   | 1 |

            // Define the top row of the matrix
            int[] shouldMultiplyBits = {1, 1, 1, 1, 1, 0, 0, 0};

            // Create a function that converts the 1's and 0's to bits
            Func<int[], BitArray> toBitArray = vector => new BitArray(vector.Select(b => b != 0).ToArray());
            BitArray shouldMultiply = toBitArray(shouldMultiplyBits);

            // Convert a to bits
            BitArray aVector = new BitArray(new[] {a});

            BitArray multiplyResult = new BitArray(8);

            // Perform the multiply 
            for (int offset = 0; offset < 8; offset++)
            {
                for (int bit = 0; bit < 8; bit++)
                {
                    bool currentMultiplyBitValue = shouldMultiplyBits[(8 + ((8 - offset) + bit))%8] != 0;
                    bool currentBitMultiplyResult = currentMultiplyBitValue && aVector[7 - bit];
                    if (currentBitMultiplyResult)
                    {
                        multiplyResult[offset] = !multiplyResult[offset];
                    }
                }
            }

            // Perform the vector add, which is a simply xor
            int[] affineVectorBits = {0, 1, 1, 0, 0, 0, 1, 1};
            BitArray affineVector = toBitArray(affineVectorBits);

            BitArray resultVector = multiplyResult.Xor(affineVector);

            // We have the bits, now convert them back to a byte, we do this
            // by OR-ing each bit to the value its position represents (if it is a 1).
            byte result = 0;
            byte multiplier = 0x80;

            for (int i = 0; i < 8; i++)
            {
                if (resultVector[i])
                {
                    result |= multiplier;
                }
                multiplier >>= 1;
            }

            return result;
        }
示例#32
0
文件: Iteration.cs 项目: WPiotr/BSK
 public void xorWithKey(int iterationIndex)
 {
     BitArray resultArray = new BitArray(rightSide[iterationIndex]);
     resultArray = resultArray.Xor(keys[iterationIndex]);
     rightSide[iterationIndex] = resultArray;
 }