private static void ValidaConfiguracionPassword(string nueva, string validacion, UsuarioEntity usuario, TipoValidacionPassword Tipo)
        {
            var configuracionSeguridad = CachingManager.Instance.GetConfiguracionSeguridad();
            int _caracteresnumericos   = 0;
            int _caracteresalfabeticos = 0;

            char _caracter_a_evaluar                = char.MinValue;
            int  _cantidadcaracterrepetido          = 0;
            int  _maxcantidadcaracteresconsecutivos = 0;

            int _cantidadcaracteresminusculas = 0;
            int _cantidadcaracteresmayusculas = 0;
            int _cantidadcaracteressimbolos   = 0;

            if ((string.IsNullOrEmpty(nueva)) && (string.IsNullOrEmpty(validacion)))
            {
                AdministradorControlErrores.EnviarExcepcion(CodeMensajes.ERR_PASSWORD_INCORRECTA, false);
            }
            // Que la nueva pass coincida con la validacion
            if (nueva != validacion)
            {
                AdministradorControlErrores.EnviarExcepcion(CodeMensajes.ERR_CLAVES_VERIFICACION, false);
            }

            // Valida que la nueva passw no sea el username
            if (usuario.Username == nueva)
            {
                AdministradorControlErrores.EnviarExcepcion(CodeMensajes.ERR_CLAVENOUSERNAME, false);
            }

            // Valida que la nueva passw contenga solo numeros o caracteres alfabeticos
            foreach (char chr in nueva)
            {
                if ((!Char.IsLetterOrDigit(chr)) && (!MAETools.IsSymbol(chr)))
                {
                    AdministradorControlErrores.EnviarExcepcion(CodeMensajes.ERR_CLAVEALFABETICOSNUMERICOS, false);
                }

                // Calcula cantidad de numericos y alfabeticos
                if (Char.IsDigit(chr))
                {
                    _caracteresnumericos = _caracteresnumericos + 1;
                }
                else
                {
                    if (MAETools.IsSymbol(chr))
                    {
                        _cantidadcaracteressimbolos = _cantidadcaracteressimbolos + 1;
                    }
                    else
                    {
                        _caracteresalfabeticos = _caracteresalfabeticos + 1;
                        if (Char.IsLower(chr))
                        {
                            _cantidadcaracteresminusculas = _cantidadcaracteresminusculas + 1;
                        }
                        else
                        {
                            _cantidadcaracteresmayusculas = _cantidadcaracteresmayusculas + 1;
                        }
                    }
                }

                // Calcula la maxima cantidad de caracteres que se repite el char
                if (_caracter_a_evaluar == chr)
                {
                    _cantidadcaracterrepetido = _cantidadcaracterrepetido + 1;
                }
                else
                {
                    _caracter_a_evaluar       = chr;
                    _cantidadcaracterrepetido = 0;
                }

                if (_maxcantidadcaracteresconsecutivos < _cantidadcaracterrepetido)
                {
                    _maxcantidadcaracteresconsecutivos = _cantidadcaracterrepetido;
                }
            }

            if (configuracionSeguridad.ConsideraCantidadCaracteres)
            {
                if (_caracteresnumericos < configuracionSeguridad.CantidadNumericosPassword)
                {
                    AdministradorControlErrores.EnviarExcepcion(CodeMensajes.ERR_CLAVECANTIDADNUMERICOS, false, configuracionSeguridad.CantidadNumericosPassword);
                }
                if (_caracteresalfabeticos < configuracionSeguridad.CantidadAlfabeticosPassword)
                {
                    AdministradorControlErrores.EnviarExcepcion(CodeMensajes.ERR_CLAVECANTIDADALFABETICOS, false, configuracionSeguridad.CantidadAlfabeticosPassword);
                }
                if (_cantidadcaracteresminusculas < configuracionSeguridad.CantidadMinusculasPassword)
                {
                    AdministradorControlErrores.EnviarExcepcion(CodeMensajes.ERR_CLAVECANTIDADMINUSCULAS, false, configuracionSeguridad.CantidadMinusculasPassword);
                }
                if (_cantidadcaracteresmayusculas < configuracionSeguridad.CantidadMayusculasPassword)
                {
                    AdministradorControlErrores.EnviarExcepcion(CodeMensajes.ERR_CLAVECANTIDADMAYUSCULAS, false, configuracionSeguridad.CantidadMayusculasPassword);
                }
                if (_cantidadcaracteressimbolos < configuracionSeguridad.CantidadSimbolosPassword)
                {
                    AdministradorControlErrores.EnviarExcepcion(CodeMensajes.ERR_CLAVECANTIDADSIMBOLOS, false, configuracionSeguridad.CantidadSimbolosPassword);
                }
            }

            if (configuracionSeguridad.ConsideraMinimoLargoPassword && configuracionSeguridad.CantidadMinimoLargoPassword > nueva.Length)
            {
                AdministradorControlErrores.EnviarExcepcion(CodeMensajes.ERR_CLAVE_VERIFICACION_CARACTERES, false, configuracionSeguridad.CantidadMinimoLargoPassword);
            }

            if (configuracionSeguridad.ConsideraMaximaCantCaracteresConsecutivos && (configuracionSeguridad.CantidadMaximaCaracteresConsecutivos < _maxcantidadcaracteresconsecutivos + 1))
            {
                AdministradorControlErrores.EnviarExcepcion(CodeMensajes.ERR_CLAVECANTIDADCARACTERESCONSECUTIVOS, false, (configuracionSeguridad.CantidadMaximaCaracteresConsecutivos + 1));
            }

            if ((Tipo != TipoValidacionPassword.Reset) && (ExistsClaveHistorica(usuario.IdUsuario, configuracionSeguridad.CantidadPasswordsHistoricas, MAETools.HashMD5(nueva))))
            {
                AdministradorControlErrores.EnviarExcepcion(CodeMensajes.ERR_CLAVE_EXISTE_HISTORICA, false, configuracionSeguridad.CantidadPasswordsHistoricas);
            }
        }
        private static void ValidaPassword(UsuarioEntity usuario, string vieja, string nueva, string validacion, TipoValidacionPassword Tipo)
        {
            string vieja_md5 = string.Empty;

            // Descifro solo en el casos de un changeclave (sino nunca llega como parametro)
            if (Tipo == TipoValidacionPassword.Change)
            {
                if (string.IsNullOrEmpty(vieja))
                {
                    AdministradorControlErrores.EnviarExcepcion(CodeMensajes.ERR_PASSWORD_INCORRECTA, false);
                }
                vieja_md5 = MAETools.HashMD5(vieja);
            }

            if ((Tipo == TipoValidacionPassword.Change) && (vieja_md5 != usuario.Pass))
            {
                AdministradorControlErrores.EnviarExcepcion(CodeMensajes.ERR_PASSWORD_INCORRECTA, false);
            }

            if ((Tipo == TipoValidacionPassword.Change) && (vieja == nueva))
            {
                AdministradorControlErrores.EnviarExcepcion(CodeMensajes.ERR_CLAVESINCAMBIOS, false);
            }

            ValidaConfiguracionPassword(nueva, validacion, usuario, Tipo);
        }