public static void FrequencyTable() { var text = "aaa"; var key = "69"; Xor.SingleByteXorEncrypt(text, key); }
private static void Task4() { var str1 = "1c0111001f010100061a024b53535009181c"; var str2 = "686974207468652062756c6c277320657965"; var result = "746865206b696420646f6e277420706c6179"; Console.WriteLine(Xor.BytePerByteFromHexToHex(str1, str2).ToLower()); Console.WriteLine(result == Xor.BytePerByteFromHexToHex(str1, str2).ToLower()); Console.WriteLine(Hex.FromHexString("746865206b696420646f6e277420706c6179")); }
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 }
public static void Task5() { var text = "1b37373331363f78151b7f2b783431333d78397828372d363c78373e783a393b3736"; //var text = "ciphertext"; //68 Console.WriteLine((Xor.RepeatingKey(text, "88"))); var str = new StringBuilder(); var results = new Dictionary <int, double>(); for (var i = 1; i < text.Length / 2; i++) { str.Append(new string(text.Skip(text.Length - i).ToArray())); str.Append(new string(text.Take(text.Length - i).ToArray())); var count = text.Select((t1, t) => t1 == str.ToString()[t] ? 1 : 0).Sum(); var value = (double)count / text.Length; str.Clear(); results.Add(i, value); Console.WriteLine("{0} {1}", i, Math.Round(value, 3, MidpointRounding.ToEven)); } var temp = results.ToList(); temp.Sort((x, m) => x.Value.CompareTo(m.Value)); temp.Reverse(); var blocks = new List <string>(); for (var i = 0; i < 2; i++) { var distance = temp[i].Key; var index = 0; var stringB = new StringBuilder(); for (var m = 0; m < distance; m++) { index = m; while (index < text.Length) { stringB.Append(text[index]); index += distance; } blocks.Add(stringB.ToString()); stringB.Clear(); } //получаем блоки var b = Xor.RepeatingKey(blocks[0], " "); Console.WriteLine(); } }
private static void Task7() { string[] text = { "Burning 'em, if you ain't quick and nimble", "I go crazy when I hear a cymbal" }; var key = "ICE"; var adaptiveKey = new StringBuilder(); adaptiveKey.Append(key); foreach (var str in text) { var tmp = Xor.RepeatingKey(str, key); Console.WriteLine(tmp); } }