示例#1
0
        private static void Task51()
        {
            var text = "1b37373331363f78151b7f2b783431333d78397828372d363c78373e783a393b3736";

            var a = text.Length; //68

            for (int i = 2; i < a / 2; i++)
            {
                if (a % i != 0)
                {
                    continue;
                }
                var length = text.Length / i;
                var strs   = new List <string>();

                //делим блоки попарно
                for (var t = 0; t < i; t++)
                {
                    var tmp = text.Substring(t * length, length);
                    strs.Add(tmp);
                }

                if (strs.Count % 2 != 0)
                {
                    continue;
                }
                //находим расстояние
                var averageHamingDistance = 0;

                for (var t = 0; t < strs.Count; t += 2)
                {
                    var xor             = Xor.XoringTwoBinars(strs[t], strs[t + 1]);
                    var HammingDistance = xor.Count(x => x == '1');
                    averageHamingDistance += HammingDistance;
                }

                averageHamingDistance /= strs.Count / 2;
                //Взламываем
                var blocks = new StringBuilder();


                for (var m = 0; m *averageHamingDistance < text.Length; m++)
                {
                    blocks.Append(new String(text.Skip(m * averageHamingDistance).Take(averageHamingDistance).ToArray()));
                }

                var kek = blocks.Length;
                Console.WriteLine("\n");
            }

            var d = a / 4; //16
        }