/************************************************/ /* DicoGen */ /* ------- */ /* Génération de fichier dictionnaire. */ /* */ /************************************************/ // header #include #include // strcmp #include // atoi // fonction de génération du dictionnaire // fichier => nom du fichier de sortie // LongueurMax => longueur maximal du pass // begin => caractere de "debut" // end => caractere de "fin" // err => "bidouillage" pour empécher une erreur avec génération minuscule int DicoGen(char fichier[], int LongueurMax, char begin, char end, int err) { FILE *gen; // pointeur sur fichier à générer char code[255]; // tableau contenant le code int i; // indice tableau int longueur; // longueur en traitement // ouverture fichier if((gen = fopen(fichier, "w")) == NULL) return 0; // erreur // on traite toutes les longueurs possible jusqu'a longueurmax for (longueur=1; longueur <= LongueurMax; longueur++) { // marque de fin de génération de longueur // initialisation du premier "mot" for (i=0; i < longueur; code[i++] = begin) code[longueur] = 0; // on fait toute les lettres while(code[longueur-1] <= end) { i = 0; // init indice while(code[i] > end && code[i+1] != 0) { code[i] = begin; code[++i]++; if((code[i] == ('9'+1)) && (err == 0)) code[i] = 'A'; if((code[i] == ('Z'+1)) && (err == 0)) code[i] = 'a'; if((code[i] == ('9'+1)) && (err == 1)) code[i] = 'a'; // cas particulier (5) } // ecriture du code généré dans le fichier if(err == 0) { if(('0' <= code[i] && code[i] <= '9') || ('a' <= code[i] && code[i] <= 'z') || ('A' <= code[i] && code[i] <= 'Z')) fprintf(gen, "%s\n", code); } else if(err == 1) { if(('0' <= code[i] && code[i] <= '9') || ('a' <= code[i] && code[i] <= 'z')) fprintf(gen, "%s\n", code); } code[0]++; // caractere suivant } } fclose(gen); // ferme le fichier return 1; } // fonction principale (Point d'Entrée) int main(int argc, char **argv) { /****************************************************/ /* dicogen nom_fichier_de_sortie param nb_caractere */ /* param -> -n numerique */ /* -> -cp lettre_minuscule */ /* -> -cg lettre_majuscule */ /* -> -cpg lettre_majuscule-minuscule */ /* -> -cpc lettre_minuscule_+_chiffre */ /* -> -cgc lettre_majuscule_+_chiffre */ /* -> -m lettre_chiffre */ /****************************************************/ // var int taille; // longueur de caractère int fin; // recupere si pb dans fonction // on attend deux arguments if(argc != 4) printf("Erreur !\n"); else // erreur { // convertion paramètre char -> int // du troisième paramètre (longueur du mot de passe) taille = atoi(argv[3]); if(strcmp(argv[2], "-n") == 0) // num fin = DicoGen(argv[1], taille, '0', '9', 0); else if(strcmp(argv[2], "-cp") == 0) // carac min fin = DicoGen(argv[1], taille, 'a', 'z', 0); else if(strcmp(argv[2], "-cg") == 0) // carac maj fin = DicoGen(argv[1], taille, 'A', 'Z', 0); else if(strcmp(argv[2], "-cpg") == 0) // carac min + maj fin = DicoGen(argv[1], taille, 'A', 'z', 0); else if(strcmp(argv[2], "-cpc") == 0) // carac min + num fin = DicoGen(argv[1], taille, '0', 'z', 1); else if(strcmp(argv[2], "-cgc") == 0) // carac maj + num fin = DicoGen(argv[1], taille, '0', 'Z', 0); else if(strcmp(argv[2], "-m") == 0) // carac min + maj + num fin = DicoGen(argv[1], taille, '0', 'z', 0); else fin = 0; // verification d'erreur if(fin == 1) printf("G%cn%cration termin%ce avec succ%ces...\n", 130, 130, 130, 130); else printf("Erreur lors de la g%cn%cration...\n", 130, 130); } return 1; // fin programme }