Microsoft Visual Basic 2010 Express : générer un mot de passe

Bonjour, Je voudrais créer un tout petit programme générant un mot de passe aléatoirement. Pour celà, j'utilise Microsoft Visual Basic 2010 Express. L'utilisateur doit entrer un nombre de caractères voulus, puis il clique sur le bouton "générer". J'aimerais avoir de l'aide concernant le codage du logiciel, pour générer aléatoirement une suite de caractères.

Merci d'avance ;-)



--
/Cengokill

2 réponses

  1. Bonsoir,

    En gros tu nous demande de t'apprendres à pirater...

    Je pense que c'est contraire à la charte
    0
    1. PAS DU TOUT un générateur de mot de passe aléatoire comme son nom l'indique, génère un mot de passe, c'est pourtant simple, non ?
      0
    2. Contributeur
      Tu sais lire au moins? Il n'a jamais parlé de logiciel de bruteforce.
      Un générateur de mot de passe est un très bon exercice pour apprendre à coder, d'ailleurs.
      0
    3. @ElementWmerci :)
      0
    4. @ElementWBonsoir Gravgun,

      Je pensais bien faire, dans la mesure du possible je reste "prudent" sur le forum, il y a tellement de questions "illicites" que je passe la sécurité avant tout.
      J'ai mal interprété son message, l'erreur est humaine, non ?
      Car le "tu sais lire" signifierais que je suis qu'un imbécile à tes yeux, je comprends pas pourquoi tu essayes de me rabaisser..

      Bref, j'en suis désolé cengokill.
      0
    5. Contributeur
      @dbz83Je ne t'en veut pas, l'erreur est humaine effectivement. Si je posais rhétoriquement cette question, c'était pour insister sur le message dans ses détails, car bien que je puisse comprendre que la sécurité et le respect de la charte te soient important (tant mieux d'ailleurs), il faut bien saisir de quoi on parle avant de répondre sur l'affirmative, et à défaut, demander des précisions.
      0
  2. Bonsoir
    Pour générer un mot de passe de façon aléatoire, il est préférable d'obtenir différents caractères d'une constante de façon aléatoire et non répétitive (d'une certaine manière cela élimine le facteur plus ou moins de fréquence d'apparition des caractères mais reste à vérifier). Pour faire simple l'algorithme de génération le plus simple se repose sur deux éléments essentiels: la constante de sélection de caractère et une fonction capable de générer des nombres aléatoires.
    Exemple avec un speudo code a revoir

    Fonction Alea_Char( )
    entier X = 62
    Caractère: C = 0
    Tableaux de Caractère: Vecteur_constante[X] ={ 0-9a-zA-Z }
    C = Vecteur[ random % taille vecteur ]
    Retourner C
    Fin Fonction

    Fonction GetPass( Taille n, Vecteur[N] )
    Pour i de 0 jusqu'à n
    Vecteur[i] = Alea_Char( )
    Fin pour
    Retourner Vecteur
    Fin Fonction

    Et comme en est dans une section en langage de programmation C/C++ cela donnerais en langage C le code ci-dessous bien entendu il y a des choses a revoir ou optimisé.
    à bientôt
    /*
     * Code generated by sambia39 1/07/2015 01:43:36
     * Xjagercode GenCode (XGC) version 0.8
     * admin@xjagercode.com
     * License GPL
     */
    #define	 _XOPEN_SOURCE
    #define S_MAX_PASS		100
    #define S_GEN_PASS		15
    
    #include <time.h>
    #include <errno.h>
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <unistd.h>
    
    /*	Masque générateur de mots de passe on peut également jouer avec la
     	table ASCII directement choisissant aléatoirement les informations
     	entre 33 -127
    */
    const char c_str_reg[] =
    		"0123456789"
    		"abcdefghijklmnopqrstuvwyz"
    		"ABCDEFGHIJKLMNOPQRSTUVWYZ";
    
    const char c_str_reg_cplx[] =
    		"0123456789"
    		"abcdefghijklmnopqrstuvwyz"
    		"ABCDEFGHIJKLMNOPQRSTUVWYZ"
    		"&é'(-è_çà)=~#{[|^@]}°+!$"
    		"$£ù%µ*!<>oeOE";
    
    /*	Fonction qui alloue de la mémoire dynamiquement
     	pour le stockage du mot de passe
     */
    char *f_alloc_str( size_t size ){
    
    	char *ptr = NULL;
    	size_t size_str = ( (0) == size ) ? S_MAX_PASS : size;
    	ptr = (char*)calloc( size_str, sizeof(char) );
    	if( (NULL) == ptr ){
    		fflush( stderr );
    		fprintf( stderr, "(%d)\t:Erreur d'allocation mémoire\n %s\n",
    				errno,strerror(errno) );
    		return NULL;
    	}
    	return ptr;
    }
    
    /*	Fonction qui génère un mot de passe sans la fonction crypte elle prend
     	en paramètre la taille du mot de passe et un pointeur pointant sur une
     	zone allouée pour le stockage du mot de passe.
    */
    char *f_get_GenPass_no_crypt( size_t size, char *ptr ){
    
    	unsigned int i = 0;
    	static unsigned int iseed;
    
    	if( !iseed ){
    		iseed = 1;
    		srand( (unsigned int)time(NULL) );
    	}
    
    	/*	Génération du mot de passe */
    	for( i = 0; i < size; i++ )
    		*(ptr+i) = c_str_reg[ rand()% (int) strlen(c_str_reg) ];
    	*(ptr+i) = '\0';
    
    	return ptr;
    }
    
    /*	Fonction qui génère un mot de passe avec la fonction crypte elle prend
     	en paramètre la taille du mot de passe et un pointeur pointant sur une
     	zone allouée pour le stockage du mot de passe.
    */
    char *f_get_GenPass_on_crypt( size_t size, char *ptr){
    
    	char seed = '\0';
    	unsigned int i = 0;
    	char t_tab[ S_MAX_PASS ];
    	static unsigned int iseed;
    
    	if( !iseed ){
    		iseed = 1;
    		srand( (unsigned int) time(NULL) );
    	}
    
    	/*	Génération du mot de passe 	*/
    	for( i = 0; i < size; i++ )
    		*(ptr+i) = c_str_reg[ rand() % (int) strlen(c_str_reg) ];
    	*(ptr+i) = '\0';
    
    	seed = c_str_reg[ rand() % (int) strlen(c_str_reg) ];
    	strcpy( t_tab, crypt(&seed,c_str_reg) );
    	strcpy( ptr, t_tab );
    	*(ptr+i) = '\0';
    
    	return ptr;
    }
    
    
    /*	Fonction Principale	*/
    int main( void ){
    
    	char *ptr_gen = NULL;
    	unsigned int i = 0;
    
    	fflush( stdout );
    	ptr_gen = f_alloc_str( S_MAX_PASS );
    	if( (NULL) == ptr_gen )
    		return EXIT_FAILURE;
    
    	fprintf( stdout, "Généré avec la fonction no crypt\n-----\n" );
    	for( i = 0; i < S_GEN_PASS; i++ ){
    		memset( ptr_gen, 0, (sizeof ptr_gen/ sizeof *ptr_gen) );
    		ptr_gen = f_get_GenPass_no_crypt( S_GEN_PASS, ptr_gen );
    		fprintf( stdout, "(%d)\t:%s\n", i, ptr_gen );
    	}
    
    	fprintf( stdout, "\nGénéré avec la fonction on crypt\n-----\n" );
    	for( i = 0; i < S_GEN_PASS; i++ ){
    		memset( ptr_gen, 0, (sizeof ptr_gen/ sizeof *ptr_gen) );
    		ptr_gen = f_get_GenPass_no_crypt( S_GEN_PASS, ptr_gen );
    		fprintf( stdout, "(%d)\t:%s\n", i, ptr_gen );
    	}
    
    	fflush( stdout );
    	free( ptr_gen );
    	ptr_gen = NULL;
    
    	return EXIT_SUCCESS;
    }
    

    0