Esempio n. 1
0
        /// <summary>
        /// Estimates the attempts required to guess the password.
        /// </summary>
        /// <param name="match">The match.</param>
        /// <param name="password">The actual password.</param>
        /// <returns>The guesses estimate.</returns>
        public static double EstimateGuesses(Match match, string password)
        {
            if (match.Guesses != 0)
            {
                return(match.Guesses);
            }

            var minGuesses = 1.0;

            if (match.Token.Length < password.Length)
            {
                minGuesses = match.Token.Length == 1 ? BruteForceGuessesCalculator.MinSubmatchGuessesSingleCharacter : BruteForceGuessesCalculator.MinSubmatchGuessesMultiCharacter;
            }

            var guesses = 0.0;

            switch (match.Pattern)
            {
            case "bruteforce":
                guesses = BruteForceGuessesCalculator.CalculateGuesses(match as BruteForceMatch);
                break;

            case "date":
                guesses = DateGuessesCalculator.CalculateGuesses(match as DateMatch);
                break;

            case "dictionary":
                guesses = DictionaryGuessesCalculator.CalculateGuesses(match as DictionaryMatch);
                break;

            case "regex":
                guesses = RegexGuessesCalculator.CalculateGuesses(match as RegexMatch);
                break;

            case "repeat":
                guesses = RepeatGuessesCalculator.CalculateGuesses(match as RepeatMatch);
                break;

            case "sequence":
                guesses = SequenceGuessesCalculator.CalculateGuesses(match as SequenceMatch);
                break;

            case "spatial":
                guesses = SpatialGuessesCalculator.CalculateGuesses(match as SpatialMatch);
                break;
            }

            match.Guesses = Math.Max(guesses, minGuesses);
            return(match.Guesses);
        }
Esempio n. 2
0
        public void IsDelegatedToByEstimateGuesses()
        {
            var match = new RepeatMatch
            {
                Token          = "aa",
                BaseToken      = "a",
                BaseGuesses    = PasswordScoring.MostGuessableMatchSequence("a", Core.GetAllMatches("a")).Guesses,
                BaseMatchItems = new List <Match>(),
                RepeatCount    = 2,
                i = 1,
                j = 2,
            };

            var expected = RepeatGuessesCalculator.CalculateGuesses(match);
            var actual   = PasswordScoring.EstimateGuesses(match, "aa");

            actual.Should().Be(expected);
        }
Esempio n. 3
0
        public void CalculatesTheRightNumberOfGuesses(string token, string baseToken, int expectedRepeats)
        {
            var baseGuesses = PasswordScoring.MostGuessableMatchSequence(baseToken, Core.GetAllMatches(baseToken)).Guesses;

            var match = new RepeatMatch
            {
                Token          = token,
                BaseToken      = baseToken,
                BaseGuesses    = baseGuesses,
                RepeatCount    = expectedRepeats,
                BaseMatchItems = new List <Match>(),
                i = 1,
                j = 2,
            };

            var expected = baseGuesses * expectedRepeats;

            var actual = RepeatGuessesCalculator.CalculateGuesses(match);

            actual.Should().Be(expected);
        }