All pastes #932058 Raw Edit

Unnamed

public text v1 · immutable
·published 2008-03-07 13:45 UTC
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
}