public void Analyze_IfPasswordContainsWrongChars_ThrowException(string password)
 {
     Assert.Throws <ArgumentException>(() =>
     {
         PasswordAnalyzer.Analyze(password);
     });
 }
            public void ExtractPasswordMetadata_NumbersCount_ShouldEqualToLength(string password)
            {
                var meta = PasswordAnalyzer.ExtractPasswordMetadata(password);

                Assert.IsTrue(meta.IsOnlyConsistsOfDigits);

                Assert.AreEqual(password.Length, meta.NumbersCount);
            }
            public void ExtractPasswordMetadata_RepeatingCharsCount_ShouldEqualToLength(string password)
            {
                var meta = PasswordAnalyzer.ExtractPasswordMetadata(password);

                Assert.AreEqual(password.Length, meta.RepeatingCharsCount);
            }
 public void EmptyPassword_ShouldReturn_ZeroStrength()
 {
     Assert.AreEqual(0, PasswordAnalyzer.Analyze(""));
 }
            public void ExtractPasswordMetadata_UppercaseLettersCount_ShouldEqualToLength(string password)
            {
                var meta = PasswordAnalyzer.ExtractPasswordMetadata(password);

                Assert.AreEqual(password.Length, meta.UppercaseLettersCount);
            }
 public void Analyze_ShouldCalculate_CorrectPasswordStrengthForLongPasswords(string password, int expectedStrength)
 {
     Assert.AreEqual(expectedStrength, PasswordAnalyzer.Analyze(password));
 }
Ejemplo n.º 7
0
        static void Main(string[] args)
        {
            string basePath = @"C:\BRUTUS\";
            int targetPWLen = 12;
            int maxCharset = 35;
            int mbOut = 1;

            if (args.Length >= 3)
            {
                int.TryParse(args[0], out targetPWLen);
                int.TryParse(args[1], out maxCharset);
                int.TryParse(args[2], out mbOut);
            }

            PasswordAnalyzer analyzer = new PasswordAnalyzer();
            analyzer.ProcessPasswordList(basePath + "passwords.txt");
            PasswordAnalyzer.SerializeToFile(analyzer, basePath + "serialized.xml");

            //analyzer = PasswordAnalyzer.DeserializeFromFile(basePath + "serialized.xml");
            analyzer.DumpStats(@basePath);

            DictionaryBuilder builder = new TopNextDictionaryBuilder()
            {
                MaxOutputSizeInBytes = 1024 * 1024 * mbOut,
                Analyzer = analyzer,
                TargetWordSize = targetPWLen
            };

            builder.GenerateDictionary(basePath + "dictionary_out.txt");

            ////Mask testMask = new Mask()
            ////{
            ////    Charset1 = "ABCDSP",
            ////    Charset2 = "aeiouyrstln123",
            ////    Charset3 = "aeiouyrstln1234567890",
            ////    Charset4 = "1234567890!@#$",
            ////    MaskString = "1222233334"
            ////};

            CharsetSelector selector = new TopSpotSelector()
            {
                Analyzer = analyzer,
                MaxCharsPerSet = maxCharset,
                TargetMaskLength = targetPWLen
            };

            Mask testMask = selector.GetMask();

            // run optimizer to select best mask string with given charset
            MaskOptimizer optimizer = new MiddleShiftMaskOptimizer()
            {
                //StartingMaskString = "1222233334",
                //UseAllCharsets = true,
                TargetMaskLength = targetPWLen,
                PasswordListFilename = basePath + "passwords.txt"
            };
            optimizer.OptimizeMask(testMask);

            // dump results of the optimized mask
            MaskAnalyzer maskAnalyzer = new MaskAnalyzer(testMask);
            MaskAnalyzerResults results = maskAnalyzer.AnalyzeMaskCoverage(basePath + "passwords.txt");

            Console.WriteLine(testMask.ToString());
            Console.WriteLine("Mask Space Coverage {0}%", Math.Round(maskAnalyzer.MaskCoveragePercent, 8).ToString(".#########################"));
            Console.WriteLine("Mask Total Cracking Time {0}", maskAnalyzer.MaskTotalCrackingTime.ToString());
            Console.WriteLine("Matched {0}", results.MatchedCount);
            Console.WriteLine("Missed {0}", results.MissedCount);
            Console.WriteLine("Matched {0}%", Math.Round(results.MatchedPercent, 4));
            Console.WriteLine("Missed {0}%", Math.Round(results.MissedPercent, 4));
        }