static void ValidateModel(MarkovChain model, Dictionary <string, double> passwords, int guesses, bool hashed) //passwords here is not used... { Console.Write("Validating on {0} guesses... ", guesses); PasswordCrackingEvaluator eval = new PasswordCrackingEvaluator(guesses, hashed); var results = eval.Validate(model); Console.WriteLine("Accounts: {0} Uniques: {1}", results._fitness, results._alternativeFitness); }
// Runs a comparison of the two model types. static void RunAllMarkovModelPairs(object special) { const string EXPERIMENT_OFFSET = @"..\..\..\experiments\intermediate\"; string[] models = new string[] { "first-order", "8-layer" }; // For every dataset, create a model for (int i = 0; i < _datasetFilenames.Length; i++) { if (i != (int)special) { continue; } for (int m = 0; m < 2; m++) { int outputs; string seedFile = EXPERIMENT_OFFSET + "seed-" + models[m] + "-" + _datasetFilenames[i].Name + ".xml"; Console.Write("Building {0} Markov model...", models[m]); if (m == 0) { outputs = MarkovFilterCreator.GenerateFirstOrderMarkovFilter(seedFile, _passwords[i]); } else { outputs = MarkovFilterCreator.GenerateLayeredMarkovFilter(seedFile, _passwords[i], 8); } Console.WriteLine("Done! Outputs: {0}", outputs); _experiment.OutputCount = outputs; Console.WriteLine("Loading seed..."); var seed = _experiment.LoadPopulation(XmlReader.Create(seedFile))[0]; Console.WriteLine("Creating model..."); var model = _experiment.CreateGenomeDecoder().Decode(seed); // For every dataset, test the model for (int j = 0; j < _datasetFilenames.Length; j++) { Console.Write("Validating {0} {1} model on {2} with {3} guesses... ", models[m], _datasetFilenames[i].Name, _datasetFilenames[j].Name, VALIDATION_GUESSES); PasswordCrackingEvaluator eval = new PasswordCrackingEvaluator(VALIDATION_GUESSES, false); var results = eval.Validate(model, _passwords[j], EXPERIMENT_OFFSET + models[m] + "-" + _datasetFilenames[i].Name + "-" + _datasetFilenames[j].Name + ".csv", 10000); // Console.WriteLine("Accounts: {0} Uniques: {1}", results._fitness, results._alternativeFitness); Console.WriteLine("Total Score: {0} Uniques: {1}", results._fitness, results._alternativeFitness); lock (_writerLock) using (TextWriter writer = new StreamWriter(@"..\..\..\experiments\summary_results.csv", true)) writer.WriteLine("{0},{1},{2},{3},{4}%,{5}%", _datasetFilenames[i].Name, _datasetFilenames[j].Name, results._fitness, results._alternativeFitness, results._fitness / (double)_passwords[j].Sum(kv => kv.Value) * 100, results._alternativeFitness / (double)_passwords[j].Count * 100); } } } }