예제 #1
0
        public override void Evaluate(IInterpretingContext context, Evaluator mainEvaluator, BaseExpression expression)
        {
            var exp      = expression as GenExpression;
            var alphabet = exp.Alphabets.Select(x => context.Alphabet.GetAlphabet(x)).Aggregate((current, next) => current + next);
            var rand     = new Random();

            var res = "";

            for (var i = 0; i < exp.Length; i++)
            {
                res += alphabet[rand.Next(0, alphabet.Length)];
            }

            PushToContext(res, context);
        }
예제 #2
0
        private void PushToContext(string password, IInterpretingContext context)
        {
            int i = 0;

            while (i < Int32.MaxValue)
            {
                if (context.GetObject("Generated-" + i) != null)
                {
                    i++;
                }
                else
                {
                    context.SetObject("Generated-" + i, password);
                    break;
                }
            }
        }
        public T Generate()
        {
            context = new Evaluator(resolver.Resolve(), context).Evaluate();

            return(OnEvaluated());
        }
예제 #4
0
 public FromCommandPasswordGenerator(string cmd, IInterpretingContext context, IAlphabet alphabet)
 {
     resolver = new StringCommandResolver(cmd);
     context  = new InterpretingContext(alphabet);
 }
예제 #5
0
 public Evaluator(List <BaseExpression> expressions, IInterpretingContext context)
 {
     this.expressions = expressions;
     this.context     = context;
 }
예제 #6
0
 public abstract void Evaluate(IInterpretingContext context, Evaluator mainEvaluator, BaseExpression expression);