Autor Tema: [c#] Generador de contraseñas y analizar si son fuertes o débiles  (Leído 9930 veces)

Sixtoex

  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 105
    • Ver Perfil
 :P :P :P :P :P

Estoy bastante CONTENTO  ;D ;D, a ver hice una aplicación que genera contraseñas ALEATORIAS y además te dice si es POTENTE o no  :)

Quiero que me den su valoración y porfavor decirme en que podría mejorar, de veras, te lo agradecere enormemente

Creo que ya nombro mejor a las clases y las utilizo mejor y mi lógica de programacion creo que a aumentado.

Clase Password:

Código: [Seleccionar]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace generarPassword
{

    class Password
    {
        int longitud = 8;
        public Password(int longitud)
        {
            this.longitud = longitud;
            generarPassword();
           
        }
     
        private void generarPassword()
        {
            string cadena = "";
            string guardarCadena = "";
            int m = 0;
            int[] numero = new int[this.longitud];
            string[] letras = new string[this.longitud];
            int esFuerte = 0;
            Random rnd = new Random();
            int i;
            for (i = 0; i < this.longitud; i++)
            {
                numero[i] = rnd.Next(65,131);


            }
            for (int e = 65; e <= 122; e++)
            {
                if (m >= this.longitud)
                {
                    break;
                }
                if (numero[m] >= 65)
                {
                   
                    switch (numero[m])
                    {
                        case 65:
                            letras[m] = "A";
                            break;
                        case 66:
                            letras[m] = "B";
                            break;
                        case 67:
                            letras[m] = "C";
                            break;
                        case 68:
                            letras[m] = "D";
                            break;
                        case 69:
                            letras[m] = "E";
                            break;
                        case 70:
                            letras[m] = "F";
                            break;
                        case 71:
                            letras[m] = "G";
                            break;
                        case 72:
                            letras[m] = "H";
                            break;
                        case 73:
                            letras[m] = "I";
                            break;
                        case 74:
                            letras[m] = "J";
                            break;
                        case 75:
                            letras[m] = "K";
                            break;
                        case 76:
                            letras[m] = "L";
                            break;
                        case 77:
                            letras[m] = "M";
                            break;
                        case 78:
                            letras[m] = "N";
                            break;
                        case 79:
                            letras[m] = "O";
                            break;
                        case 80:
                            letras[m] = "P";
                            break;
                        case 81:
                            letras[m] = "Q";
                            break;
                        case 82:
                            letras[m] = "R";
                            break;
                        case 83:
                            letras[m] = "R";
                            break;
                        case 84:
                            letras[m] = "S";
                            break;
                        case 85:
                            letras[m] = "T";
                            break;
                        case 86:
                            letras[m] = "U";
                            break;
                        case 87:
                            letras[m] = "V";
                            break;
                        case 88:
                            letras[m] = "W";
                            break;
                        case 89:
                            letras[m] = "X";
                            break;
                        case 90:
                            letras[m] = "Y";
                            break;
                        case 91:
                            letras[m] = "Z";
                            break;
                        case 92:
                            letras[m] = "a";
                            break;
                        case 93:
                            letras[m] = "b";
                            break;
                        case 94:
                            letras[m] = "c";
                            break;
                        case 95:
                            letras[m] = "d";
                            break;
                        case 96:
                            letras[m] = "e";
                            break;
                        case 97:
                            letras[m] = "f";
                            break;
                        case 98:
                            letras[m] = "g";
                            break;
                        case 99:
                            letras[m] = "h";
                            break;
                        case 100:
                            letras[m] = "i";
                            break;
                        case 101:
                            letras[m] = "j";
                            break;
                        case 102:
                            letras[m] = "k";
                            break;
                        case 103:
                            letras[m] = "l";
                            break;
                        case 104:
                            letras[m] = "m";
                            break;
                        case 105:
                            letras[m] = "n";
                            break;
                        case 106:
                            letras[m] = "o";
                            break;
                        case 107:
                            letras[m] = "p";
                            break;
                        case 108:
                            letras[m] = "q";
                            break;
                        case 109:
                            letras[m] = "r";
                            break;
                        case 110:
                            letras[m] = "s";
                            break;
                        case 111:
                            letras[m] = "t";
                            break;
                        case 112:
                            letras[m] = "u";
                            break;
                        case 113:
                            letras[m] = "v";
                            break;
                        case 114:
                            letras[m] = "w";
                            break;
                        case 115:
                            letras[m] = "x";
                            break;
                        case 116:
                            letras[m] = "y";
                            break;
                        case 117:
                            letras[m] = "z";
                            break;
                        case 118:
                            letras[m] = "0";
                            break;
                        case 119:
                            letras[m] = "1";
                            break;
                        case 120:
                            letras[m] = "2";
                            break;
                        case 121:
                            letras[m] = "3";
                            break;
                        case 122:
                            letras[m] = "4";
                            break;
                        case 123:
                            letras[m] = "5";
                            break;
                        case 124:
                            letras[m] = "6";
                            break;
                        case 125:
                            letras[m] = "7";
                            break;
                        case 126:
                            letras[m] = "8";
                            break;
                        case 127:
                            letras[m] = "9";
                            break;
                        case 128:
                            letras[m] = "@";
                            break;
                        case 129:
                            letras[m] = "/";
                            break;
                        case 130:
                            letras[m] = "]";
                            break;
                        case 131:
                            letras[m] = "-";
                            break;
                        case 132:
                            letras[m] = "}";
                            break;
                    }
                   
                }
                m = m + 1;
            }
            int y = 1;
           
            for (int n = 0; n <=this.longitud; n++)
            {
             

               cadena = letras[n] ;
               guardarCadena =cadena+guardarCadena;

               if (y == this.longitud)
               {
                   break;
               }
                y = y + 1;
               
               
            }
            Console.Write(guardarCadena);

            for (int v = 0; v < 66; v++)
            {
                if (v == this.longitud)
                {
                    Console.WriteLine();
                    if (esFuerte > 8)
                    {
                        Console.WriteLine("La contraseña es potente");
                    }
                    if (esFuerte < 8 && esFuerte > 5)
                    {
                        Console.WriteLine("La contraseña es normalita");
                    }
                    if (esFuerte < 4)
                    {
                        Console.WriteLine("la contraseña es Débil");
                    }
                    if (this.longitud > 8)
                    {
                        esFuerte = esFuerte + 2;

                    }
                    else
                    {
                        esFuerte = esFuerte - 4;
                    }
                    return;
                }
             if(numero[v] > 65 && numero[v] < 91)
                {
                    esFuerte++;
             
                }
             if (numero[v] >= 65 && numero[v] <= 91)
             {
                 esFuerte++;

             }
             if (numero[v] >= 92 && numero[v] <= 117)
             {
                 esFuerte++;

             }
             if (numero[v] >= 118 && numero[v] <= 132)
             {
                 esFuerte++;
             }

             if (v == 65)
             {
                 if (esFuerte > 8)
                 {
                     Console.WriteLine("La contraseña es potente");
                 }
                 if (esFuerte < 8 && esFuerte > 5)
                 {
                     Console.WriteLine("La contraseña es normalita");
                 }
                 if(esFuerte < 4)
                 {
                     Console.WriteLine("la contraseña es Débil");
                 }
                 if (this.longitud > 8)
                 {
                     esFuerte = esFuerte + 2;

                 }
                 else
                 {
                     esFuerte = esFuerte - 4;
                 }
                 return;
             }

            }

           
        }
       
    }
}


Clase Program(no se cambiar este nombre): aquí es donde se ejecuta el metodo Main:

Código: [Seleccionar]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace generarPassword
{
    class Program
    {
        static void Main(string[] args)
        {
            Password generarContraseña = new Password(10);
           

           
        }
    }
}
« Última modificación: 07 de Noviembre 2014, 08:20 por Ogramar »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2662
    • Ver Perfil
Re:[c#] Generador de contraseñas y analizar si son fuertes o débiles
« Respuesta #1 en: 07 de Noviembre 2014, 08:21 »
Hola, no quiero ser crítico "porque sí", en el código se ven cosas muy bien hechas, manejo de instrucciones y sentencias que utilizas bien, y otras cosas que no están bien hechas (al menos desde mi punto de vista). En concreto:

Sigues sin tener un diseño orientado a objetos. Tienes una única clase que lo hace todo, incluido el mostrar mensajes por consola. Por contra, la clase con el método main no hace nada. Esto denota que no estás haciendo un buen diseño orientado a objetos posiblemente porque te falta estudiar e interiorizar cómo se trabaja la orientación a objetos.

La otra cosa que llama la atención a cualquier programador experimentado y que podemos decir que está mal concebida es el uso de switch con una ristra de sentencias case detrás:

case 65:
letras[m] = "A";
break;
case 66:
letras[m] = "B";
break;
...
...
...

Cuando tienes case 65, case 66, case 67 ... y así sucesivamente esto sugiere un mal diseño del código: se ve que sería más adecuado usar un bucle que usar una ristra de cases. Para usar un bucle tienes que pensar cómo hacerlo, posiblemente debas usar instrucciones auxiliares que permiten obtener el valor numérico asociado a una letra y al revés (como Encoding.ASCII.GetBytes(cadena); ó (int)c donde c es un carácter)

Al ver esa ristra de cases, lo que induce a pensar es que las 50 líneas que has empleado se podrían reducir a 10 si usas un bucle y las instrucciones adecuadas. No te hablo que siempre sea así, habrá casos en que no sea posible, pero en general ver algo así indica un fallo en la concepción del código.

Salu2!

Sixtoex

  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 105
    • Ver Perfil
Re:[c#] Generador de contraseñas y analizar si son fuertes o débiles
« Respuesta #2 en: 07 de Noviembre 2014, 13:28 »
Ogramar, empece buscando patrones de diseño(pero eso no es lo que usted me quiere decir).

Ahor abusque sobre diseño orientado a objetos y esto es lo que usted quiere decir:

Encontré este libro:

http://www.freelibros.org/programacion/diseno-orientado-a-objetos-con-uml.html

Lee la descripción y creo que es ese...

pero creo que esto del diseño tengo que aprenderlo cuando sepa manejarme muy myu bien el programación, creo que aprenderlo ahora sería un desperdicio no?

Fijate en este es un videocurso: http://www.freelibros.org/programacion/video2brain-fundamentos-de-la-programacion-diseno-orientado-a-objetos-2014-espanol.html

http://www.freelibros.org/programacion/aprende-uml-en-24-horas-joseph-schmuller.html


Aquí arreglado lo del Case:

Código: [Seleccionar]
for (int e = 65; e <= 122; e++)
            {
                if (m >= this.longitud)
                {
                    break;
                }
                if (numero[m] >= 65)
                {
                   for(int k = 65; k <= 132;k++)
                       {
                           if (numero[m] == k)
                           {
                               if (m == 26)
                               {
                                   m = 0;
                               }
                               letras[m] = abc[m];
                               m = m + 1;
                               k = 65;
                               break;
                             
                           }
                           if (k == 132)
                           {
                               k = 65;
                               m = m + 1;
                           }
   
                       }
                }
            }
« Última modificación: 07 de Noviembre 2014, 16:47 por Sixtoex »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2662
    • Ver Perfil
Re:[c#] Generador de contraseñas y analizar si son fuertes o débiles
« Respuesta #3 en: 08 de Noviembre 2014, 16:35 »
Ahora lo del case mucho mejor. Lo que yo quiero decir en relación a cuestiones básicas sobre diseño en programación orientada a objetos lo tienes en: http://aprenderaprogramar.com/index.php?option=com_content&view=category&id=68&Itemid=188

Posiblemente también en alguno de esos libros que citas, pero no lo sé.

El diseño se debe ir aprendiendo poco a poco, a medida que vayas progresando. Ir aprendiendo desde ya no es un desperdicio, es hacer las cosas bien. No se trata de que te dediques únicamente al diseño ni de que en unos días pienses que vas a interiorizar todos los conceptos que hay en torno a la programación orientada a objetos. ¿Y cómo hacerlo? Como dice el refrán: si tienes prisa, vete despacio.

Salu2

Sixtoex

  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 105
    • Ver Perfil
Re:[c#] Generador de contraseñas y analizar si son fuertes o débiles
« Respuesta #4 en: 08 de Noviembre 2014, 17:14 »
En el metodo Main:

Este si que permite CUALQUIER LONGITUD:


 Ascii correponde con el UTF-16

Es decir me ahorre 200 y pico de lineas por solo 39, de la siguiente manera:

Código: [Seleccionar]
Console.WriteLine("Escribe la longitud");
            int longitud = int.Parse(Console.ReadLine());
            int i;
            char x;
            char cadena;
            Random rnd = new Random();
             i = rnd.Next(38, 126);

            for(int e = 0; e< longitud;e++)
            {
             x = (char)i;
           
             
             Console.Write(x);
             
             i++;
             if (i >= 126)
             {
                 i = i / 2;
             }
            }
            Console.WriteLine();
« Última modificación: 08 de Noviembre 2014, 17:16 por Sixtoex »

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".