예제 #1
0
        private static double SequenceGuesses(Match match)
        {
            char firstChar = match.Token[0];

            double baseGuesses = 0;

            if ((new HashSet <char> {
                'a', 'A', 'z', 'Z', '0', '1', '9'
            }).Contains(firstChar))
            {
                baseGuesses = 4;
            }
            else
            {
                if (Char.IsDigit(firstChar))
                {
                    baseGuesses = 10;
                }
                else
                {
                    baseGuesses = 26;
                }
            }
            SequenceMatch sm = (SequenceMatch)match;

            if (!sm.Ascending)
            {
                baseGuesses *= 2;
            }
            return(baseGuesses * match.Token.Length);
        }
        /// <summary>
        /// Estimates the attempts required to guess the password.
        /// </summary>
        /// <param name="match">The match.</param>
        /// <returns>The guesses estimate.</returns>
        public static double CalculateGuesses(SequenceMatch match)
        {
            double baseGuesses;

            if (ObviousStartCharacters.Contains(match.Token[0]))
            {
                baseGuesses = 4;
            }
            else
            {
                if (char.IsDigit(match.Token[0]))
                {
                    baseGuesses = 10;
                }
                else
                {
                    baseGuesses = 26;
                }
            }

            if (!match.Ascending)
            {
                baseGuesses *= 2;
            }

            return(baseGuesses * match.Token.Length);
        }
예제 #3
0
        public void IsDelegatedToByEstimateGuesses()
        {
            var match = new SequenceMatch
            {
                Token         = "ab",
                Ascending     = true,
                i             = 1,
                j             = 2,
                SequenceName  = "abc",
                SequenceSpace = 1,
            };

            var actual = SequenceGuessesCalculator.CalculateGuesses(match);

            actual.Should().Be(8);
        }
예제 #4
0
        public void CalculatesTheCorrectNumberOfGuesses(string token, bool ascending, int expected)
        {
            var match = new SequenceMatch
            {
                Token         = token,
                Ascending     = ascending,
                i             = 1,
                j             = 2,
                SequenceName  = "abc",
                SequenceSpace = 1,
            };

            var actual = SequenceGuessesCalculator.CalculateGuesses(match);

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