Generador de contraseñas

Iniciado por ..:ALT3RD:.., 12 Noviembre 2011, 14:34 PM

0 Miembros y 1 Visitante están viendo este tema.

..:ALT3RD:..

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)

#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!
"Mañana sabrás que hoy no sabes nada"

Queta

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 (cpp) [Seleccionar]
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.
"Intenta no volverte un hombre de éxito, sino volverte un hombre de valor." Albert Einstein.

..:ALT3RD:..

Me parece una forma interesante de hacerlo, gracias ya lo comprendi :)
"Mañana sabrás que hoy no sabes nada"

Queta

"Intenta no volverte un hombre de éxito, sino volverte un hombre de valor." Albert Einstein.

..:ALT3RD:..

Aqui esta el codigo completo por si a alguien le interesa:

#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;
}
"Mañana sabrás que hoy no sabes nada"

do-while

¡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 (cpp) [Seleccionar]

char mi_letra = (char)((rand() % 26 + 'a') + (rand() % 2) * ('A' - 'a'));

Asi si rand() % 2 == 1, generara una mayuscula y si rand() % 2 == 0 sera una letra minuscula.

Minusculas y numeros:
Código (cpp) [Seleccionar]

int numero = rand() % 2;
char mi_letra = (char)(rand() % (26 - 16 * numero) + 'a' + numero * ('0' - 'a'));

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!
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!

..:ALT3RD:..

"Mañana sabrás que hoy no sabes nada"