rendered paste body/************************************************/
/* DicoGen */
/* ------- */
/* Génération de fichier dictionnaire. */
/* */
/************************************************/
// header
#include <stdio.h>
#include <string.h> // strcmp
#include <stdlib.h> // 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
}