Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: ..:ALT3RD:.. en 12 Noviembre 2011, 14:34 pm



Título: Generador de contraseñas
Publicado por: ..:ALT3RD:.. en 12 Noviembre 2011, 14:34 pm
Buenas  :D

quiero hacer un generador de contraseñas y esto es lo que llevo (las letras no estan todas, cuando terminé el programa pongo las demas)

Código:
#include <iostream>
#include <cstdlib>

using namespace std;

int main()
{

    int contador=0;
    int cifras;
    char letras[10] ={'a','b','c','d','e','f','g','h','i','\0'};
    cout << "____Generador____" << endl;
    cout << "" << endl;
    cout << "Cuantas cifras:";
    cin  >> cifras;
    do   {


        contador++;
       


    }while (cifras >= contador);

    return 0;
}

Dentro de la sentecia do while , me gustaría saber como hacer azar con caracteres, se hacerlo con numeros pero no encuentro forma de hacerlo con los caracteres del array letras.

Un salu2!


Título: Re: Generador de contraseñas
Publicado por: Queta en 12 Noviembre 2011, 15:19 pm
Un método sencillo y rápido sería calcular el módulo de 26, cuyo resultado sería un entero entre 0 y 25, y luego sumarlo por el carácter 'a':

Código
  1. char mi_letra = (char)(rand() % 26 + 'a');

La explicación es sencilla: 'a' equivale a 97, en el código ASCII, y en total hay 26 letras minúsculas. Si el resultado del módulo fuese  0, la suma sería 97 + 0, o sea, la letra 'a'; si fuese 1 sería 97 + 1 que equivaldría a la letra 'b' y así sucesivamente hasta llegar a 97 + 25 que su resultado sería la 'z'.

En base a esta lógica, puedes aplicarlo para letras mayúsculas y cualquier otro signo.


Título: Re: Generador de contraseñas
Publicado por: ..:ALT3RD:.. en 12 Noviembre 2011, 15:22 pm
Me parece una forma interesante de hacerlo, gracias ya lo comprendi :)


Título: Re: Generador de contraseñas
Publicado por: Queta en 12 Noviembre 2011, 15:31 pm
De nada ::).


Título: Re: Generador de contraseñas
Publicado por: ..:ALT3RD:.. en 13 Noviembre 2011, 15:52 pm
Aqui esta el codigo completo por si a alguien le interesa:

Código:
#include <iostream>
#include <cstdlib>

using namespace std;

int main()
{

    int contador=0;
    int cifras;
    int opcion;
    cout << "____Generador____" << endl;
    cout << "" << endl;
    cout << "1-Minusculas" << endl;
    cout << "2-Minusculas y Mayusculas" << endl;
    cout << "3-Minusculas y Numeros" << endl;
    cout << "Numero de Cifras:" << endl;
    cin >> cifras;
    cout << "Elige una opcion:" << endl;
    cin  >> opcion;
    switch (opcion) {

    case 1:
    do   {
        contador++;
        char mi_letra = (char)(rand() % 26 + 'a');
        cout <<mi_letra;
        }while (cifras>= contador);
        break;


    case 2:
       do   {
        contador++;
        char mi_letra2 = (char)(rand() % 26 + 'a');
        char mi_letra3 = (char)(rand() % 26 + 'A');
        cout << mi_letra2 << mi_letra3;
        }while (cifras >= contador);
        break;

    case 3:
       do   {
        contador++;
        char mi_letra4 = (char)(rand() % 26 + 'a');
        char mi_letra5 = (char)(rand() % 9 + '0');
        cout << mi_letra4 << mi_letra5;
        }while (cifras >= contador);
        break;


    }

    return 0;
}


Título: Re: Generador de contraseñas
Publicado por: do-while en 13 Noviembre 2011, 16:42 pm
¡Buenas!

No es que tu codigo este mal, pero hay una forma de generar un solo caracter por iteracion para el segundo y tercer caso:

Mayusculas y minusculas
Código
  1. char mi_letra = (char)((rand() % 26 + 'a') + (rand() % 2) * ('A' - 'a'));
  2.  
Asi si rand() % 2 == 1, generara una mayuscula y si rand() % 2 == 0 sera una letra minuscula.

Minusculas y numeros:
Código
  1. int numero = rand() % 2;
  2. char mi_letra = (char)(rand() % (26 - 16 * numero) + 'a' + numero * ('0' - 'a'));
  3.  
Si numero == 1, generaras primero un numero aleatorio ente 0 y 9, al que le sumaras 'a' y '0' - 'a', por lo que te generara un digito entre 0 y 9.

Si numero == 0, generaras un numero entre 0 y 25 al que le sumaras 'a' y 0 * ('0' - 'a'), es decir, tendras un caracter entre 'a' y  'a' + 25.

¡Saludos!


Título: Re: Generador de contraseñas
Publicado por: ..:ALT3RD:.. en 13 Noviembre 2011, 16:44 pm
Gracias por el detalle  ;D