Code using System; using System.Collections.Generic; using System.Linq; using System.Text;
namespace md5hasher { class Program { public static string res = ""; public static string GetMD5Hash(string input) { System.Security.Cryptography.MD5CryptoServiceProvider x = new System.Security.Cryptography.MD5CryptoServiceProvider(); byte[] bs = System.Text.Encoding.UTF8.GetBytes(input); bs = x.ComputeHash(bs); System.Text.StringBuilder s = new System.Text.StringBuilder(); foreach (byte b in bs) { s.Append(b.ToString("x2").ToLower()); } string password = s.ToString(); return password; } static void Main(string[] args) { bool genbul = false; long count = 0; string kletka, hod,id, gdata, gtime, hash, add; string reshash, predp; System.Console.Write("Введите предпологаемую клетку: "); kletka= System.Console.ReadLine(); switch (kletka) { case "1": res = "[*234567]"; break; case "2": res = "[1*34567]"; break; case "3": res = "[12*4567]"; break; case "4": res = "[123*567]"; break; case "5": res = "[1234*67]"; break; case "6": res = "[12345*7]"; break; case "7": res = "[123456*]"; break; } System.Console.Write("Введите номер хода: "); hod = System.Console.ReadLine(); switch (hod) { case "1": { res += "-ход№1"; break; } case "2": { res += "-ход№2"; break; } case "3": { res += "-ход№3"; break; } case "4": { res += "-ход№4"; break; } case "5": { res += "-ход№5"; break; } }
System.Console.Write("Идентификатор игры: "); id = System.Console.ReadLine(); res += "-id" + id;
System.Console.Write("Дата создания: "); gdata = System.Console.ReadLine(); res += "-" + gdata;
System.Console.Write("Время создания: "); gtime = System.Console.ReadLine(); res += " " + gtime;
System.Console.Write("Хэш: "); hash = System.Console.ReadLine();
System.Console.Write("Должны получить это: " + hash + "\n"); int[] a1= {0, 1, 2, 3, 4, 5 }; int[] a2 = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; char[] a3 = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z', 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z', '-','&',':','@','%','0','1','2','3','4','5','6','7','8','9'};
System.Random rnd = new Random(); System.Console.Write("Генерация началась !\n"); System.Console.Write(DateTime.Now+"\n"); int mm = DateTime.Now.Minute; int ss = DateTime.Now.Second; do { //------------------------------------------ add = ":" + a1[rnd.Next(5)].ToString()[0] + a2[rnd.Next(9)].ToString()[0] + "_" + a3[rnd.Next(66)] + a3[rnd.Next(66)] + a3[rnd.Next(66)] + a3[rnd.Next(66)] + a3[rnd.Next(66)] + a3[rnd.Next(66)] + a3[rnd.Next(66)] + a3[rnd.Next(66)]; //------------------------------------------ predp = res + add; //System.Console.Write("Результат: "+predp+"\n");
reshash = md5hasher.Program.GetMD5Hash(predp); //System.Console.Write("Получили: " + reshash + "\n"); count++; if ((DateTime.Now.Minute > mm) && (DateTime.Now.Second == ss)) { System.Console.Write("За минуту сгенерировано: "+ count.ToString()+" вариантов.\n"); mm = DateTime.Now.Minute; } if (hash == reshash) { System.Console.Write("!! Данный ход является ПРОИГРЫШНЫМ !!" + "\n\n"); genbul = true; } }while (!genbul);
System.Console.Write("Нажмите любую клавишу для выхода из программы"); System.Console.Read(); } } } Почему C# ? Он похож на Java. Я не знаком с C#, но всё-таки написал эту программу за пару часов, почему ? Потому что я знаком с Java ! Суть программы. Есть некая строка шифруемая алгоритмом MD5. Вводятся известные части строки. Неизвестны секунды и пароль, вот их то программа и подбирает. Пример строки: [*234567]-ход№1-id180785-2009-10-06 21:43:30_1n0fvck3 её хэш: 8108e374deaf4fc9ca438f2a8fdf6ca0 Дату можно вычислить, время, кроме секунд в принципе, тоже, но это всё балавство. Программа генерирует по 1,5 миллиона вариантов в минуту (на Thurion 64 x2 1,8 Ггц) Для образовательных целей, программа подойдёт, с практической стороны, это хлам. Также, программа не претендует на эталон кодирования, некоторые вещи можно переписать более элегантно.
|