El otro día quería generar un diccionario a medida dado que:
1. La mayoría de las contraseñas que la gente usa empieza con una Mayúscula y termina con un numero.
2. La longitud según la página web, o servicio es distinta por lo que me interesaba poder generar de longitud 8, 7, 6, etc...
No encontré nada que se asimilara a mis peticiones que me parecieron muy obvias así que pensé que iba a tardar menos si me hacia uno rápido.
He hecho un en DevC++ que la verdad me va muy bien, es muy rápido y se ajusta mucho a lo que buscaba.
El funcionamiento es simple, genera contraseñas en base a una mascara que le introduzcas.
*a = "abcdefghijklmnopqrstuvwzyxñ"
*n= "1234567890"
*s= "~!@#$%^&?*()-_+={}[]<>|,.;:/"
*m= "ABCDEFGHIJKLMNOPQRSTUVWZXYÑ"
*c= todas las posibilidades
De esa forma si la mascara que introduzco es:
*m*a*a*a*a*n Generara todas las posibles contraseñas que empiecen con una Mayúscula, tengan 4 letras adicionales y un numero al final.
*c*c*c*c*c*c*c Generaría todas las contraseñas posibles de 7 caracteres.
*m*s*c Generaría una mayúscula un símbolo y un completo.
Se pueden añadir símbolos o cosas que creáis que faltan simplemente categorizandolos dentro de una de las cadenas o implementando nuevas.
Yo suelo ejecutar siempre el programa de esta forma en consola:
programa.exe >> diccionario.txt
de forma que después de introducir mi mascara podáis guardarlo en un .txt
Podeis pedir al programa que os genere determinadas mascaras si necesidad que las tengais que introducir vosotros. Eso ya es jugar con el código.
Para aquellos que no sepan C mi consejo es que instalen Devc++ y en nuevo documento hagan copia y pega.
Espero que os sirva a alguien, ahi os va.
Código:
#include <cstdlib>
#include <iostream>
#include <string>
#include <cstring>
#include <fstream>
#include <windows.h>
#include <string>
using namespace std;
string abc("abcdefghijklmnopqrstuvwzyxñ\0");
string num("1234567890\0");
string special("~!@#$%^&?*()-_+={}[]<>|,.;:/\0");
string shiftabc("ABCDEFGHIJKLMNOPQRSTUVWZXYÑ\0");
string completo = abc + num + special + shiftabc;
string cambio_abc("*a");
string cambio_sabc("*m");
string cambio_num("*n");
string cambio_special("*s");
string cambio_completo("*c");
string mascara;
void find_replace(std::string cadena){
//abcs
unsigned found_abc = cadena.find(cambio_abc);
if (found_abc!=std::string::npos)
{
cadena.erase(found_abc+1,1);
for(int i = 0; i <= abc.length(); i++){
cadena[found_abc] = abc[i];
unsigned found_space = cadena.find(" ");
if (found_space!=std::string::npos)
{
cadena.erase(found_space,1);
}
cout << cadena << endl;
unsigned found2_abc = cadena.find(cambio_abc);
if (found2_abc!=std::string::npos)
{
find_replace(cadena);
}
unsigned found2_sabc = cadena.find(cambio_sabc);
if (found2_sabc!=std::string::npos)
{
find_replace(cadena);
}
unsigned found2_num = cadena.find(cambio_num);
if (found2_num!=std::string::npos)
{
find_replace(cadena);
}
unsigned found2_special = cadena.find(cambio_special);
if (found2_special!=std::string::npos)
{
find_replace(cadena);
}
unsigned found2_completo = cadena.find(cambio_completo);
if (found2_completo!=std::string::npos)
{
find_replace(cadena);
}
}
}
// Shift abcs
unsigned found_sabc = cadena.find(cambio_sabc);
if (found_abc!=std::string::npos)
{
cadena.erase(found_sabc+1,1);
for(int i = 0; i <= shiftabc.length(); i++){
cadena[found_sabc] = abc[i];
unsigned found_space = cadena.find(" ");
if (found_space!=std::string::npos)
{
cadena.erase(found_space,1);
}
cout << cadena << endl;
unsigned found2_abc = cadena.find(cambio_abc);
if (found2_abc!=std::string::npos)
{
find_replace(cadena);
}
unsigned found2_sabc = cadena.find(cambio_sabc);
if (found2_sabc!=std::string::npos)
{
find_replace(cadena);
}
unsigned found2_num = cadena.find(cambio_num);
if (found2_num!=std::string::npos)
{
find_replace(cadena);
}
unsigned found2_special = cadena.find(cambio_special);
if (found2_special!=std::string::npos)
{
find_replace(cadena);
}
unsigned found2_completo = cadena.find(cambio_completo);
if (found2_completo!=std::string::npos)
{
find_replace(cadena);
}
}
}
//numeros
unsigned found_num = cadena.find(cambio_num);
if (found_num!=std::string::npos)
{
cadena.erase(found_num+1,1);
for(int j = 0; j <= num.length(); j++){
cadena[found_num] = num[j];
unsigned found_space = cadena.find(" ");
if (found_space!=std::string::npos)
{
cadena.erase(found_space,1);
}
cout << cadena << endl;
unsigned found2_abc = cadena.find(cambio_abc);
if (found2_abc!=std::string::npos)
{
find_replace(cadena);
}
unsigned found2_sabc = cadena.find(cambio_sabc);
if (found2_sabc!=std::string::npos)
{
find_replace(cadena);
}
unsigned found2_num = cadena.find(cambio_num);
if (found2_num!=std::string::npos)
{
find_replace(cadena);
}
unsigned found2_special = cadena.find(cambio_special);
if (found2_special!=std::string::npos)
{
find_replace(cadena);
}
unsigned found2_completo = cadena.find(cambio_completo);
if (found2_completo!=std::string::npos)
{
find_replace(cadena);
}
}
}
//caracteres
unsigned found_special = cadena.find(cambio_special);
if (found_special!=std::string::npos)
{
cadena.erase(found_special+1,1);
for(int k = 0; k <= special.length(); k++){
cadena[found_special] = special[k];
unsigned found_space = cadena.find(" ");
if (found_space!=std::string::npos)
{
cadena.erase(found_space,1);
}
cout << cadena << endl;
unsigned found2_abc = cadena.find(cambio_abc);
if (found2_abc!=std::string::npos)
{
find_replace(cadena);
}
unsigned found2_sabc = cadena.find(cambio_sabc);
if (found2_sabc!=std::string::npos)
{
find_replace(cadena);
}
unsigned found2_num = cadena.find(cambio_num);
if (found2_num!=std::string::npos)
{
find_replace(cadena);
}
unsigned found2_special = cadena.find(cambio_special);
if (found2_special!=std::string::npos)
{
find_replace(cadena);
}
unsigned found2_completo = cadena.find(cambio_completo);
if (found2_completo!=std::string::npos)
{
find_replace(cadena);
}
}
}
//Completo
unsigned found_completo = cadena.find(cambio_completo);
if (found_completo!=std::string::npos)
{
cadena.erase(found_completo+1,1);
for(int k = 0; k <= completo.length(); k++){
cadena[found_completo] = completo[k];
unsigned found_space = cadena.find(" ");
if (found_space!=std::string::npos)
{
cadena.erase(found_space,1);
}
cout << cadena << endl;
unsigned found2_abc = cadena.find(cambio_abc);
if (found2_abc!=std::string::npos)
{
find_replace(cadena);
}
unsigned found2_sabc = cadena.find(cambio_sabc);
if (found2_sabc!=std::string::npos)
{
find_replace(cadena);
}
unsigned found2_num = cadena.find(cambio_num);
if (found2_num!=std::string::npos)
{
find_replace(cadena);
}
unsigned found2_special = cadena.find(cambio_special);
if (found2_special!=std::string::npos)
{
find_replace(cadena);
}
unsigned found2_completo = cadena.find(cambio_completo);
if (found2_completo!=std::string::npos)
{
find_replace(cadena);
}
}
}
}
int main(int argc, char *argv[]) {
{
cout << "Escribe la mascara" << endl;
cin >> mascara;
find_replace(mascara);
system("PAUSE");
return EXIT_SUCCESS;
}
}