[java] password

Fermé
pierre - 2 déc. 2006 à 12:14
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 - 4 déc. 2006 à 22:30
Salut à tous

Voila j'ai un peu cherché sur le site et je ne trouve pas de code java pour generer un mot de passe de 6 caractères par exemple.

Avec des lettres,des chiffres

Si quelqu'un a des indications pour coder ca ou encore un script :)

Merci d'avance
A voir également:

4 réponses

asevere Messages postés 13084 Date d'inscription lundi 28 janvier 2002 Statut Webmaster Dernière intervention 23 novembre 2024 426
2 déc. 2006 à 18:44
Bonsoir,

Je pense que le générateur se base sur l'heure du système pour son initialisation seulement, (ie: new Random) comme la plupart du temps. Donc la pause après ne fait que le ralentir ;)

Par contre, je me serais moins compliqué la vie:
import java.util.*;

public class test{
    public static void main(String args[])
    {
        String alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_-@#&'(!?)$%?:;/.?,";
        Random rand = new Random();
        for (int i=0; i<6; i++)
        {
                System.out.print(alphabet.charAt(rand.nextInt(alphabet.length())));
        }
        System.out.print("\n");
    }
}
Qui me sort:
PBG4:~ adrien$ javac test.java 
PBG4:~ adrien$ for i in 1 2 3 4 5 6 7 8 9 0; do java test; done;
Lug$7u
Rh%l2C
mD$ir3
g9G(Vp
P7cWeB
RK$85u
gKurYA
3cMc@!
:b,HVq
sJxO1e
PBG4:~ adrien$ 


:-)

@plus
4
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
2 déc. 2006 à 14:30
Salut,

Je viens de reflechir sur ce truc. Et le problème et qu'il ya une classe Random dans l'api Java qui peut générer des nombres aléatoires (ou plutôt pseudo-aléatoire)...
Le problème est que le nombre utilisé pour calculer des nombres pseudo-aléatoires dans java est construit à partir de l'heure système).
Ce qui fait que pour augmenter le caractère aléatoire de ce générateur, il faut attendre un peu entre la génération de chaque caractères. Donc c'est lent.

J'ai fait un script qui attend 1/2 seconde entre chaque caractère généré.
Parce que:

*d'une part,je génère un nombre entre 0 et 3 (exclu) pour choisir si le prochain caractère sera un chiffre, une minuscule ou une majuscule. Or il semble que plus l'éventail de nombre, dans lequel on en pioche un hasard, est petit, plus il y a de chance que ce nombre soit le même que celui qui a été tiré juste avant....

*d'autre part il faut aussi choisir un chiffre ou une lettre à générer, l'eventail de choix est un peu plus grand mais le problème reste le même.

Bref, j'ai bien un script mais c'est juste pour te donner une idée du truc, je serais toi je l'utiliserai pas si la sécurité est quelque chose de primordial pour ce que tu veux faire:
import java.util.*;

public class test{
	public static void main(String args[])
	{
                //On crée 10 mots de passe aléatoires
		RandomString rs=new RandomString(6);
		for(int i=0;i<10;i++)
		{
			System.out.println(rs.getNewRandom());
		}
	}
}

class RandomString
{
	private int taille; //Taille de la chaine à générer
	private final static int chiffre=0;
	private final static int lettre_min=1;
	private final static int lettre_maj=2;

	public RandomString(int taille)
	{
		this.taille=taille;
	}
       //Génération d'un caractère aléatoire
	private char nextChar()
	{
		int ret=0;
		Random r=new Random();
                //On determine si le caractère sera un chiffre ou une lettre
		int nextType=r.nextInt(3);
		switch (nextType)
		{
			case chiffre:
				ret=r.nextInt(10);
				ret+=48;
				break;

			case lettre_min:
				ret=r.nextInt(26);
				ret+=97;
				break;

			case lettre_maj:
				ret=r.nextInt(26);
				ret+=65;
				break;
		}
		return (char)ret;
	}
	//Génère une chaine aléatoire
	public String getNewRandom()
	{
		char [] tab_c = new char[taille];
		for (int i=0; i<taille; i++)
		{
			tab_c[i]=this.nextChar();
                        //On dort 1/2 seconde
			try{
				Thread.sleep(500);
			}
			catch (Exception e){}
		}
		return new String(tab_c);
	}
}


En plus c'est lent....
0
Merci pour ta réponse,

Jvais voir comment jpeux arranger la chose.
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
2 déc. 2006 à 23:49
Ah ben vi :-)
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
3 déc. 2006 à 00:39
Salut kilian,

pour s'amuser regarde les messages 1,2,5 et 7 dans ce thread :-)

ce n'est pas du java :-) (shell et kanji :-))
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
4 déc. 2006 à 22:30
Rah bon sang, j'arrive pas à faire plus court en python :-(
Mais j'ai au moins réussi à le faire tenir en une ligne :-)

for i in range(0,9): __import__("sys").stdout.write(chr(__import__("random").choice(range(48, 58) + range(65, 91) + range(97, 123))))
0