Generateur de mot par incrementation

Cette source est considérée comme dangereuse, elle a néamoins été gardée dans un but pédagogique :
Cette source est considérée comme dangereuse, elle a néamoins été gardée dans un but pédagogique.

Contenu du snippet

Cette class permet de renvoyer un mot à partir d'un autre avec une permutation du dernier caractère depuis une liste de caractère (sous forme de chaine). Une fois que le dernier caractere à été permuté jusqu'a la fin de cette liste, on permute le dernier caractère -1, et ainsi de suite.

En gros en partant de "a" nous aurons :
-> b, c,..., z, aa, ab, ac,..., az, ba, bb, bc,..., aaa, aab, aac,...,aaaa, aaab, ...

Source / Exemple :


/***************************************************************************************************************

  • ElgStringIterator - v1.1
  • -----------------------------------------------------------------------------------------------------
  • Generation de chaine par permutation lineaire depuis une liste de caractere
* *
  • -----------------------------------------------------------------------------------------------------
  • v1.0 : release
  • v1.1 : Modification des termes utilisés
  • Modification du main
  • /
class ElgStringIterator { /******************************************************************************************************************
  • Constructeur *
                                                                                                                                                                                                                                    • /
// Constructeur par defaut public ElgStringIterator() throws Exception { // Par defaut on se sert de tous les caractères // Ps : Cette liste peut être personnalisée via "setCaracteres()" _caracteres = this.EGL_SI_CHAR_MINUSCULE + this.EGL_SI_CHAR_MAJUSCULE + this.EGL_SI_CHAR_NUMERIQUE + this.EGL_SI_CHAR_SPECIAUX; } /******************************************************************************************************************
  • Constantes *
                                                                                                                                                                                                                                    • /
// Listes de caractères prédefinies public static final String EGL_SI_CHAR_MINUSCULE = "abcdefghijklmnopqrstuvwxyz"; public static final String EGL_SI_CHAR_MAJUSCULE = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; public static final String EGL_SI_CHAR_NUMERIQUE = "0123456789"; public static final String EGL_SI_CHAR_SPECIAUX = "!$%&/()=?"; /******************************************************************************************************************
  • Attributs *
                                                                                                                                                                                                                                    • /
private String _caracteres; // Caractères utilisés pour la generation de la chaine /******************************************************************************************************************
  • Proprietes *
                                                                                                                                                                                                                                    • /
// Accesseur sur _caracteres public String getCaracteres() { return _caracteres; } // Mutateur sur _caracteres public void setCaracteres( String valeur ) { _caracteres = valeur; } /******************************************************************************************************************
  • Methodes *
                                                                                                                                                                                                                                    • /
// Cherche dans la liste "_caracteres" le caractere demande, et renvoi le suivant // Nb : S'il s'agit du dernier caractere on repasse en debut de liste private char prochainCaractere(char caractere) throws Exception { char resultat; char premierCaractere = this._caracteres.charAt(0); char dernierCaractere = this._caracteres.charAt(this._caracteres.length() - 1); int position = this._caracteres.indexOf(caractere); if (caractere == dernierCaractere) resultat = premierCaractere; else resultat = this._caracteres.charAt( position + 1 ); return resultat; } // Genere chaine suivante public String chaineSuivante(String chaineOrigine) throws Exception { String chaineNouvelle = ""; // Resultat (nouvelle chaine generee) int iterateur; // Iterator int increment; // Memorise position dans la chaine int pointeurPosition; // Memorise position dans la chaine char premierCaractere = this._caracteres.charAt(0); // Premier caractere de la liste de caracteres char dernierCaractere = this._caracteres.charAt(this._caracteres.length() - 1); // Dernier caractere de la liste de caracteres if ( chaineOrigine.trim().equals("") ) return new String("") + premierCaractere; pointeurPosition = chaineOrigine.length(); increment = 0; // Calcul positions while (pointeurPosition > 0) { if (chaineOrigine.charAt(pointeurPosition - 1) != dernierCaractere) { increment = pointeurPosition - 1; break; } pointeurPosition--; if (pointeurPosition == 0) { pointeurPosition--; break; } } // Generation mot de passe if (pointeurPosition < 0) { for (iterateur = 0; iterateur < (chaineOrigine.length() + 1); iterateur++) chaineNouvelle = chaineNouvelle + premierCaractere; } else { if (increment == 0) chaineNouvelle = new String("") + this.prochainCaractere(chaineOrigine.charAt(increment) ); else chaineNouvelle = chaineOrigine.substring(0, increment) + this.prochainCaractere(chaineOrigine.charAt(increment)); for (iterateur = increment + 1; iterateur < (chaineOrigine.length()); iterateur++) chaineNouvelle = chaineNouvelle + premierCaractere; } return chaineNouvelle; } /******************************************************************************************************************
  • Entry point (Test) *
                                                                                                                                                                                                                                    • /
public static void main( String[] args ) { String maChaine = ""; int niveauProfondeur = 0; System.out.println("\n----------------------------------------------------------"); System.out.println(" ElgStringIterator - Generateur de chaine par permutation"); System.out.println(" Ecrit par LEVEUGLE Damien"); System.out.println(" Elguevel software (c) 2009"); System.out.println("----------------------------------------------------------\n"); try { ElgStringIterator monObjet = new ElgStringIterator(); // Trop d'arguments if ( args.length < 3 ) { // Si au moins 1 ou 2 arguments if ( args.length > 0 ) { // Recupere niveau profondeur (sinon infini) try { niveauProfondeur = (int) Integer.valueOf( args[0] ); } catch ( NumberFormatException nfe ) { System.out.println("\tErreur : Niveau de profondeur invalide !\n"); System.exit(1); } // Recupere chaine de depart if ( args.length > 1 ) maChaine = args[1]; } // Affichage chaines while ( niveauProfondeur == 0 || niveauProfondeur >= maChaine.length() ) { maChaine = monObjet.chaineSuivante( maChaine ); // Recupere chaine, et renvoi la suivante System.out.println( "-> " + maChaine ); } } else { System.out.println("\tUsage : ElgStringIterator <longueure max.> <chaine de depart>\n" ); } } catch( Exception ex ) { System.out.println("Erreur : " + ex.toString() ); } } }

Conclusion :


Pour les tests :
----------------
Compilation : javac ElgBruteForce.java
Execution : java ElgBruteForce <LONG. MAX> <CHAINE DEPART>

-> les parametres entre "<...>" sont facultatifs.

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.