PK yD META-INF/PK yDJMETA-INF/MANIFEST.MFManifest-Version: 1.0 Ant-Version: Apache Ant 1.8.2 Created-By: 1.7.0_51-b13 (Oracle Corporation) Class-Path: X-COMMENT: Main-Class will be added automatically by build PK pyDde/PK pyDde/aysx/PK yDde/aysx/pwgen/PK yDde/aysx/pwgen/common/PK yDde/aysx/pwgen/impl/PK pyDzU%de/aysx/pwgen/PasswordGenerator.class2p F GHIJKL M M M M MNO P P QR STUV F WX Y Z [\ F ]^_MINI ConstantValueMAX()VCodeLineNumberTableLocalVariableTablethis!Lde/aysx/pwgen/PasswordGenerator; getPassword()Ljava/lang/String;ilangeegalc[Cfueller!Lde/aysx/pwgen/common/Auffueller;bed*Lde/aysx/pwgen/common/Bedingungserfueller;ergLjava/lang/String; StackMapTable^3`ab zufallsLaenge()IrLjava/util/Random; SourceFilePasswordGenerator.java &' @A"de/aysx/pwgen/impl/AuffuellerKleinde/aysx/pwgen/impl/AuffuellerSZ#de/aysx/pwgen/impl/AuffuellerZiffer"de/aysx/pwgen/impl/AuffuellerGross(de/aysx/pwgen/impl/AuffuellerAlleZeichen &c!de/aysx/pwgen/impl/KeinSZamAnfangde/aysx/pwgen/impl/KeinSZamEnde &d` efa ghjava/lang/StringBuilder ijjava/lang/Character &k il m.java/util/Random node/aysx/pwgen/PasswordGeneratorjava/lang/Objectde/aysx/pwgen/common/Auffueller(de/aysx/pwgen/common/Bedingungserfuellerjava/lang/String%(ILde/aysx/pwgen/common/Auffueller;)V-(Lde/aysx/pwgen/common/Bedingungserfueller;)Vfuelle([C)[CpruefenKorrigierenWeitergeben([CII)[Cappend-(Ljava/lang/String;)Ljava/lang/StringBuilder;(C)V-(Ljava/lang/Object;)Ljava/lang/StringBuilder;toStringnextInt(I)I! !"#$!"%&'(/*)* +,-.(P*<=NYYYYY : YY:-W--dW:6-(YY-4:)2 -.0 66EGMNNZP^QhRQU*Ra,/!+,0!1! 236Z45GI67^289:a;<=>?+@A(`<YM,`<)\] ^_* +,8! BCDEPK yDTz` ` $de/aysx/pwgen/PasswordGenerator.javapackage de.aysx.pwgen; import java.util.Random; import de.aysx.pwgen.common.Auffueller; import de.aysx.pwgen.common.Bedingungserfueller; import de.aysx.pwgen.impl.AuffuellerAlleZeichen; import de.aysx.pwgen.impl.AuffuellerGross; import de.aysx.pwgen.impl.AuffuellerKlein; import de.aysx.pwgen.impl.AuffuellerSZ; import de.aysx.pwgen.impl.AuffuellerZiffer; import de.aysx.pwgen.impl.KeinSZamAnfang; import de.aysx.pwgen.impl.KeinSZamEnde; /** * Einstiegpunkt fr das Verstndis des PasswordGenerator-Projekts. * Diese Klasse wird benutzt, um ein Passwort zu generieren. * * Kontrolliert, wie das Passwort erzeugt wird. * Steuert die Erzeuger-Klassen, steckt sie passend zusammen. * */ public class PasswordGenerator { /** * Minimale Lnge des Passworts.
* Wenn man es noch flexibler mchte, dann macht man aus diesem Wert eine * Variable. Fr's erste ist es eine Konstante. * */ public static final int MIN = 8; /** * Maximale Lnge des Passworts.
* Bemerkung wie bei MIN. */ public static final int MAX = 14; /** * * @return ein zuflliges Password, das den Anforderungen entsprich. */ public String getPassword() { int lange = zufallsLaenge(); // Eine Zahl zwischen MIN und MAX. int egal = 0; // Wird nur fr die syntaktische Korrektheit bentigt. char[] c = new char[lange]; /* Hier spiegelt sich deutlich die Anforderung wider, welche Zeichen * enthalten sein sollen und wieviele jeweils. * SZ steht fr "Sonderzeichen". */ Auffueller fueller = new AuffuellerKlein ( 2, new AuffuellerSZ ( 2, new AuffuellerZiffer ( 2, new AuffuellerGross ( 2, /* Wenn das PW mehr als 8 Zeichen hat, dann wird der restliche Freiraum mit beliebigen Zeichen aufgefllt. Die Anzahl ist "egal", weil ein AuffuellerAlleZeichen dafr sorgt, dass alle restlichen freien Positionen belegt werden. */ new AuffuellerAlleZeichen ( egal, null ))))); /* Ein weiterer Teil der Anforderung - deutlich sichtbar mit * wenig Phantasie. */ Bedingungserfueller bed = new KeinSZamAnfang ( new KeinSZamEnde (null)); /* * Die folgenden neun Zeilen sorgen dafr, dass das PW erzeugt, * aufbereitet und zurckgegeben wird. */ fueller.fuelle ( c ); bed.pruefenKorrigierenWeitergeben ( c, 0, c.length - 1 ); String erg = ""; for (int i = 0; i < c.length; i++) { erg += new Character(c[i]); } return erg; } /** * @return eine Zahl zwischen MIN und MAX; */ private int zufallsLaenge() { int erg = 0; Random r = new Random(); erg = MIN + r.nextInt(MAX - MIN + 1); return erg; } } PK pyD֎l%de/aysx/pwgen/common/Auffueller.class2W > ? @ A B C D E F GH > I JK L JMNOanzahlInextAuffueller!Lde/aysx/pwgen/common/Auffueller;%(ILde/aysx/pwgen/common/Auffueller;)VCodeLineNumberTableLocalVariableTablethis zeichenAnzahlnextgetZeichenklasse()Ljava/lang/String; getAnzahl()I setAnzahl(I)VigetNext#()Lde/aysx/pwgen/common/Auffueller;setNext$(Lde/aysx/pwgen/common/Auffueller;)Vafuelle([C)[Cc[C StackMapTablegetZufallschar()CrandomLjava/util/Random;maxposergCgetLeerePosZufaellig([C)IrH SourceFileAuffueller.java P #$ ()   !" 89 01 &' +,java/util/Random  Q R" ST UVde/aysx/pwgen/common/Auffuellerjava/lang/Object()Vjava/lang/StringlengthnextInt(I)IcharAt(I)C! Y***,   !"/*  #$>* $%%&'/*1 ()>*+ 56*+,.=*+*+*U* * + W+E FEI#J,M %..-./ 01# Y L* =+>* 6VWXY Z4#234 5 6789& Y M+>,6+4 ,6cd fgh#j4&&-.:3 46/ ;<=PK yD  $de/aysx/pwgen/common/Auffueller.javapackage de.aysx.pwgen.common; import java.util.Random; /** * Fuellt ein Char[] mit der angegebenen Anzahl von Zeichen.
* Danach wird der nchste Auffueller aufgerufen, wenn einer vorhanden ist.
*
* Die unterschiedlichen konkreten Ausprgungen dieser Klasse leisten * wesentlich eins: Sie stellen eine jeweils passende Menge von Zeichen zur * Verfgung, aus der mittels Zufallsgenerator eine bestimmte Anzahl ausgewhlt * wird.
* Beispiel: AuffuellerGross ( 2, ...) kennt alle Grossbuchstaben und whlt * aus dieser Menge zwei Buchstaben aus. */ public abstract class Auffueller { public Auffueller(int zeichenAnzahl, Auffueller next) { setAnzahl(zeichenAnzahl); setNext(next); } /** * Aus welcher Zeichenklassen sollen Zeichen gezogen werden? Aus dieser! */ public abstract String getZeichenklasse(); /** * Wieviele Zeichen sollen gezogen werden? So viele! */ public int getAnzahl() { return anzahl; } public void setAnzahl(int i) { anzahl = i; } private int anzahl; /** * Ein Auffueller kann einen anderen Auffueller dekorieren, so dass zuerst * das eine getan wird und dann der nchste Auffueller das nchste tut usw. * bis zum Ende der Kette. * * @return Den dekorierten Auffueller. */ public Auffueller getNext() { return nextAuffueller; } public void setNext(Auffueller a) { nextAuffueller = a; } private Auffueller nextAuffueller; /** * TODO Beachten Konstraints, z.B. Laenge des Arrays >= getAnzahl, z.B. * Anzahl der freien Pltze im Array >= getAnzahl. Erstmal gehe ich davon * aus, dass schon alles gutgeht. Dieser Code ist noch provisorisch.
* * @param c das zu fuellende Array * @return ein char[], das entsprechend diesem Auffueller und seinen * dekorierten Auffuellern bearbeitet wurde. */ public char[] fuelle ( char[] c ) { for (int i = 0; i < getAnzahl(); i++) { c [ getLeerePosZufaellig ( c )] = getZufallschar (); } if (null != getNext()) { getNext().fuelle(c); } return c; } /** * @return Ein Zeichen, das zufllig aus der Menge der hier bekannten * Zeichen ausgewhlt wird. */ public char getZufallschar () { Random random = new Random (); int max = getZeichenklasse ().length (); int pos = random.nextInt ( max ); char erg = getZeichenklasse ().charAt( pos ); return erg; } /** * @param c Das zu fllende Array. * @return Eine zufllig ausgewhlte leere Stelle in c. */ private int getLeerePosZufaellig ( char[] c ) { Random r = new Random (); int max = c.length; int erg = r.nextInt ( max ); while ( c [ erg ] != 0 ){ erg = r.nextInt ( max ); } return erg; } } PK pyDGɣ.de/aysx/pwgen/common/Bedingungserfueller.class2  next*Lde/aysx/pwgen/common/Bedingungserfueller;getNext,()Lde/aysx/pwgen/common/Bedingungserfueller;CodeLineNumberTableLocalVariableTablethissetNext-(Lde/aysx/pwgen/common/Bedingungserfueller;)VpruefenKorrigierenWeitergeben([CII)[C SourceFileBedingungserfueller.java  (de/aysx/pwgen/common/Bedingungserfuellerjava/lang/Object()V! /*     >*+    F **+     PK yDdį-de/aysx/pwgen/common/Bedingungserfueller.javapackage de.aysx.pwgen.common; /** * Prft, ob ein Char[] einer bestimmten Bedingung gengt.
* Wenn es der Bedingung nicht gengt, dann werden Zeichen getauscht, so * dass die Bedingung erfllt ist.
* Nachdem die Bedingung erfllt ist, wird das zu prfende Array an den * nchsten Bedingungsprfer weitergegeben (Dekorator-Pattern). * */ public abstract class Bedingungserfueller { private Bedingungserfueller next; /** * @return Der nchste Bedingungserfller. Darf null sein. */ public Bedingungserfueller getNext () { return next; } public void setNext ( Bedingungserfueller next ) { this.next = next; } public Bedingungserfueller ( Bedingungserfueller next ) { this.next = next; } /** * Diese Methode prft, ob die jeweils zu implementierende Bedingung erfllt * ist. Falls nicht, wird korrigiert. Und wenn es einen nchsten * Bedingungserfller gibt, dann wird er aufgerufen. * * @param c das zu prfende Array * @param vonPos Die Stelle, von der an das Array geprft und verndert * werden soll. Wenn ich z.B. einen Erste-Stelle-Prfer habe, und der hat die erste * Stelle korrigiert, dann muss verhindert werden, dass die Korrektur verndert * wird. Das erreiche ich, indem der vonPos einen passenden Wert hat. * * @param bisPos Die Stelle, bis zu der das Array geprft und verndert * werden soll. Gegenstck zu vonPos. * * @return ein korrigiertes Array. */ public abstract char[] pruefenKorrigierenWeitergeben ( char[] c, int vonPos, int bisPos ); } PK pyDJd55$de/aysx/pwgen/common/Constants.class2  SONDERZEICHENLjava/lang/String; ConstantValueKLEINBUCHSTABENGROSSBUCHSTABENZIFFERN()VCodeLineNumberTableLocalVariableTablethis Lde/aysx/pwgen/common/Constants; SourceFileConstants.java de/aysx/pwgen/common/Constantsjava/lang/Object!§$%&/()=}][{-_.:,;<>abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789!     /* PK yD|J &&#de/aysx/pwgen/common/Constants.javapackage de.aysx.pwgen.common; /** * Konstanten im Projekt PasswordGenerator. */ public class Constants { /* Auf Wunsch sind einige Zeichen nicht enthalten. */ public static final String SONDERZEICHEN = "!$%&/()=}][{-_.:,;<>"; /* Kleinbuchstaben */ public static final String KLEINBUCHSTABEN = "abcdefghijklmnopqrstuvwxyz"; /* Grossbuchstaben */ public static final String GROSSBUCHSTABEN = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; /* Ziffern */ public static final String ZIFFERN = "0123456789"; } PK pyDO^::.de/aysx/pwgen/impl/AuffuellerAlleZeichen.class24 !"#$% &' ( ) *+,%(ILde/aysx/pwgen/common/Auffueller;)VCodeLineNumberTableLocalVariableTablethis*Lde/aysx/pwgen/impl/AuffuellerAlleZeichen; zeichenAnzahlInext!Lde/aysx/pwgen/common/Auffueller;getZeichenklasse()Ljava/lang/String;fuelle([C)[Cic[C StackMapTable SourceFileAuffuellerAlleZeichen.java abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!§$%&/()=}][{-_.:,;<> 0123456789- ./ 01 23 (de/aysx/pwgen/impl/AuffuellerAlleZeichende/aysx/pwgen/common/Auffuellerjava/lang/Stringconcat&(Ljava/lang/String;)Ljava/lang/String;getZufallschar()CgetNext#()Lde/aysx/pwgen/common/Auffueller;!  I*,  < /=++4 +*U* *+ W+!"&$(-+ //  PK yDC>>-de/aysx/pwgen/impl/AuffuellerAlleZeichen.javapackage de.aysx.pwgen.impl; import de.aysx.pwgen.common.Auffueller; import de.aysx.pwgen.common.Constants; public class AuffuellerAlleZeichen extends Auffueller { /** * * @param zeichenAnzahl NB wird ignoriert. * @param next */ public AuffuellerAlleZeichen (int zeichenAnzahl, Auffueller next) { super ( zeichenAnzahl, next ); } @Override public String getZeichenklasse () { return Constants.KLEINBUCHSTABEN.concat ( Constants.GROSSBUCHSTABEN.concat ( Constants.SONDERZEICHEN.concat ( Constants.ZIFFERN ))); } public char[] fuelle ( char[] c ) { for ( int i = 0; i < c.length; i++ ) { if ( 0 == c[i] ){ c [ i ] = getZufallschar (); } } if ( null != getNext () ) { getNext ().fuelle ( c ); } return c; } } PK pyDBlCC(de/aysx/pwgen/impl/AuffuellerGross.class2 %(ILde/aysx/pwgen/common/Auffueller;)VCodeLineNumberTableLocalVariableTablethis$Lde/aysx/pwgen/impl/AuffuellerGross; zeichenAnzahlInext!Lde/aysx/pwgen/common/Auffueller;getZeichenklasse()Ljava/lang/String; SourceFileAuffuellerGross.java ABCDEFGHIJKLMNOPQRSTUVWXYZ"de/aysx/pwgen/impl/AuffuellerGrossde/aysx/pwgen/common/Auffueller!I*,     -  PK yDMJtt'de/aysx/pwgen/impl/AuffuellerGross.javapackage de.aysx.pwgen.impl; import de.aysx.pwgen.common.Auffueller; import de.aysx.pwgen.common.Constants; public class AuffuellerGross extends Auffueller { public AuffuellerGross (int zeichenAnzahl, Auffueller next) { super ( zeichenAnzahl, next ); } @Override public String getZeichenklasse () { return Constants.GROSSBUCHSTABEN; } } PK pyDDCC(de/aysx/pwgen/impl/AuffuellerKlein.class2 %(ILde/aysx/pwgen/common/Auffueller;)VCodeLineNumberTableLocalVariableTablethis$Lde/aysx/pwgen/impl/AuffuellerKlein; zeichenAnzahlInext!Lde/aysx/pwgen/common/Auffueller;getZeichenklasse()Ljava/lang/String; SourceFileAuffuellerKlein.java abcdefghijklmnopqrstuvwxyz"de/aysx/pwgen/impl/AuffuellerKleinde/aysx/pwgen/common/Auffueller!I*,     -  PK yDqtt'de/aysx/pwgen/impl/AuffuellerKlein.javapackage de.aysx.pwgen.impl; import de.aysx.pwgen.common.Auffueller; import de.aysx.pwgen.common.Constants; public class AuffuellerKlein extends Auffueller { public AuffuellerKlein (int zeichenAnzahl, Auffueller next) { super ( zeichenAnzahl, next ); } @Override public String getZeichenklasse () { return Constants.KLEINBUCHSTABEN; } } PK pyD/)66%de/aysx/pwgen/impl/AuffuellerSZ.class2 %(ILde/aysx/pwgen/common/Auffueller;)VCodeLineNumberTableLocalVariableTablethis!Lde/aysx/pwgen/impl/AuffuellerSZ; zeichenAnzahlInext!Lde/aysx/pwgen/common/Auffueller;getZeichenklasse()Ljava/lang/String; SourceFileAuffuellerSZ.java !§$%&/()=}][{-_.:,;<>de/aysx/pwgen/impl/AuffuellerSZde/aysx/pwgen/common/Auffueller!I*,     -  PK yDq(ll$de/aysx/pwgen/impl/AuffuellerSZ.javapackage de.aysx.pwgen.impl; import de.aysx.pwgen.common.Auffueller; import de.aysx.pwgen.common.Constants; public class AuffuellerSZ extends Auffueller { public AuffuellerSZ ( int zeichenAnzahl, Auffueller next ) { super ( zeichenAnzahl, next ); } @Override public String getZeichenklasse () { return Constants.SONDERZEICHEN; } } PK pyD966)de/aysx/pwgen/impl/AuffuellerZiffer.class2 %(ILde/aysx/pwgen/common/Auffueller;)VCodeLineNumberTableLocalVariableTablethis%Lde/aysx/pwgen/impl/AuffuellerZiffer; zeichenAnzahlInext!Lde/aysx/pwgen/common/Auffueller;getZeichenklasse()Ljava/lang/String; SourceFileAuffuellerZiffer.java  0123456789#de/aysx/pwgen/impl/AuffuellerZifferde/aysx/pwgen/common/Auffueller!I*,     -  PK yD[Fnn(de/aysx/pwgen/impl/AuffuellerZiffer.javapackage de.aysx.pwgen.impl; import de.aysx.pwgen.common.Auffueller; import de.aysx.pwgen.common.Constants; public class AuffuellerZiffer extends Auffueller { public AuffuellerZiffer (int zeichenAnzahl, Auffueller next) { super ( zeichenAnzahl, next ); } @Override public String getZeichenklasse () { return Constants.ZIFFERN; } } PK pyD4F'de/aysx/pwgen/impl/KeinSZamAnfang.class2Y 12 34 5 6 78 9: ;<= >? @ 9A B CDE-(Lde/aysx/pwgen/common/Bedingungserfueller;)VCodeLineNumberTableLocalVariableTablethis#Lde/aysx/pwgen/impl/KeinSZamAnfang;next*Lde/aysx/pwgen/common/Bedingungserfueller;pruefenKorrigierenWeitergeben([CII)[C anderePosItauschLjava/lang/String;c[CvonPosbisPoszeichen StackMapTableFfindeNonsonderzeichen([CII)Iivonbiserg SourceFileKeinSZamAnfang.java java/lang/StringBuilder G HI HJ KL!§$%&/()=}][{-_.:,;<>F MNO PQ7Sonderzeichen am Anfang gefunden. Wird ausgetauscht ...R ST )* UV WX !de/aysx/pwgen/impl/KeinSZamAnfang(de/aysx/pwgen/common/Bedingungserfuellerjava/lang/String()Vappend-(Ljava/lang/String;)Ljava/lang/StringBuilder;(C)Ljava/lang/StringBuilder;toString()Ljava/lang/String;contains(Ljava/lang/CharSequence;)Zjava/lang/SystemoutLjava/io/PrintStream;java/io/PrintStreamprintln(Ljava/lang/String;)VcharAt(I)CgetNext,()Lde/aysx/pwgen/common/Bedingungserfueller;!>*+ uY+4: ?  *+ 6Y+4:+U+U**++dW+* !) 2!J"S#]&e's*H2+J !uu"#u$u%^&!' ]()*:66.6Y+4  /0 12.31076>1+::"#:,:-7.' */0PK yDB[[&de/aysx/pwgen/impl/KeinSZamAnfang.javapackage de.aysx.pwgen.impl; import de.aysx.pwgen.common.Bedingungserfueller; import de.aysx.pwgen.common.Constants; /** * KeinSZa*-Klassen unterscheiden sich durch * a) welches Zeichen ausgetauscht wird: pos 0 vs pos Ende; * b) Intervall, das an den nchsten Bedingungsprfer weitergegeben wird. * * Das fasse ich jetzt nicht mehr zusammen. * * @author adminkopp * */ public class KeinSZamAnfang extends Bedingungserfueller { public KeinSZamAnfang (Bedingungserfueller next) { super ( next ); } @Override public char[] pruefenKorrigierenWeitergeben ( char[] c, int vonPos, int bisPos ) { String zeichen = "" + c[0]; if ( Constants.SONDERZEICHEN.contains ( zeichen )) { System.out.println ("Sonderzeichen am Anfang gefunden. Wird ausgetauscht ..."); int anderePos = findeNonsonderzeichen ( c, vonPos, bisPos ); String tausch = "" + c[anderePos]; c[0] = tausch.charAt ( 0 ); c[anderePos] = zeichen.charAt ( 0 ); } if ( null != getNext ()){ getNext ().pruefenKorrigierenWeitergeben ( c, 1, c.length-1 ); } return c; } public int findeNonsonderzeichen ( char[] c, int von, int bis ) { int erg = 0; for ( int i = von; i <= bis; i++ ){ erg = i; if ( !Constants.SONDERZEICHEN.contains ( "" + c[i] )){ break; } } return erg; } } PK pyDzZ%de/aysx/pwgen/impl/KeinSZamEnde.class2Z 23 45 6 7 89 :; <=> ?@ A :B C DEF-(Lde/aysx/pwgen/common/Bedingungserfueller;)VCodeLineNumberTableLocalVariableTablethis!Lde/aysx/pwgen/impl/KeinSZamEnde;next*Lde/aysx/pwgen/common/Bedingungserfueller;pruefenKorrigierenWeitergeben([CII)[C anderePosItauschLjava/lang/String;c[CvonPosbisPosendezeichen StackMapTableGfindeNonsonderzeichen([CII)Iivonbiserg SourceFileKeinSZamEnde.java java/lang/StringBuilder H IJ IK LM!§$%&/()=}][{-_.:,;<>G NOP QR5Sonderzeichen am Ende gefunden. Wird ausgetauscht ...S TU *+ VW XY de/aysx/pwgen/impl/KeinSZamEnde(de/aysx/pwgen/common/Bedingungserfuellerjava/lang/String()Vappend-(Ljava/lang/String;)Ljava/lang/StringBuilder;(C)Ljava/lang/StringBuilder;toString()Ljava/lang/String;contains(Ljava/lang/CharSequence;)Zjava/lang/SystemoutLjava/io/PrintStream;java/io/PrintStreamprintln(Ljava/lang/String;)VcharAt(I)CgetNext,()Lde/aysx/pwgen/common/Bedingungserfueller;!>*+ %}+d6Y+4: @  *+ 6Y+4:+U+U**++dW+. ( 0!9"Q#[$e'm({+R9,Q !}}"#}$}%w&_'!( e)*+:66.6Y+4  01 23.41177>1,::"#:-:.7/( *01PK yD^Wyy$de/aysx/pwgen/impl/KeinSZamEnde.javapackage de.aysx.pwgen.impl; import de.aysx.pwgen.common.Bedingungserfueller; import de.aysx.pwgen.common.Constants; /** * KeinSZa*-Klassen unterscheiden sich durch * a) welches Zeichen ausgetauscht wird: pos 0 vs pos Ende; * b) Intervall, das an den nchsten Bedingungsprfer weitergegeben wird. * * Das fasse ich jetzt nicht mehr zusammen. * * @author adminkopp * */ public class KeinSZamEnde extends Bedingungserfueller { public KeinSZamEnde (Bedingungserfueller next) { super ( next ); } @Override public char[] pruefenKorrigierenWeitergeben ( char[] c, int vonPos, int bisPos ) { int ende = c.length - 1; String zeichen = "" + c[ende]; if ( Constants.SONDERZEICHEN.contains ( zeichen )) { System.out.println ("Sonderzeichen am Ende gefunden. Wird ausgetauscht ..."); int anderePos = findeNonsonderzeichen ( c, vonPos, bisPos ); String tausch = "" + c[anderePos]; c[ende] = tausch.charAt ( 0 ); c[anderePos] = zeichen.charAt ( 0 ); } if ( null != getNext ()){ getNext ().pruefenKorrigierenWeitergeben ( c, vonPos, c.length-2 ); } return c; } public int findeNonsonderzeichen ( char[] c, int von, int bis ) { int erg = 0; for ( int i = von; i <= bis; i++ ){ erg = i; if ( !Constants.SONDERZEICHEN.contains ( "" + c[i] )){ break; } } return erg; } } PK yD AMETA-INF/PK yDJ+META-INF/MANIFEST.MFPK pyDAde/PK pyDA/de/aysx/PK yDAUde/aysx/pwgen/PK yDAde/aysx/pwgen/common/PK yDAde/aysx/pwgen/impl/PK pyDzU%de/aysx/pwgen/PasswordGenerator.classPK yDTz` ` $ de/aysx/pwgen/PasswordGenerator.javaPK pyD֎l%de/aysx/pwgen/common/Auffueller.classPK yD  $de/aysx/pwgen/common/Auffueller.javaPK pyDGɣ.*de/aysx/pwgen/common/Bedingungserfueller.classPK yDdį- -de/aysx/pwgen/common/Bedingungserfueller.javaPK pyDJd55$4de/aysx/pwgen/common/Constants.classPK yD|J &&#}6de/aysx/pwgen/common/Constants.javaPK pyDO^::.8de/aysx/pwgen/impl/AuffuellerAlleZeichen.classPK yDC>>-j=de/aysx/pwgen/impl/AuffuellerAlleZeichen.javaPK pyDBlCC(@de/aysx/pwgen/impl/AuffuellerGross.classPK yDMJtt'|Cde/aysx/pwgen/impl/AuffuellerGross.javaPK pyDDCC(5Ede/aysx/pwgen/impl/AuffuellerKlein.classPK yDqtt'Gde/aysx/pwgen/impl/AuffuellerKlein.javaPK pyD/)66%wIde/aysx/pwgen/impl/AuffuellerSZ.classPK yDq(ll$Kde/aysx/pwgen/impl/AuffuellerSZ.javaPK pyD966)Mde/aysx/pwgen/impl/AuffuellerZiffer.classPK yD[Fnn(Pde/aysx/pwgen/impl/AuffuellerZiffer.javaPK pyD4F'Qde/aysx/pwgen/impl/KeinSZamAnfang.classPK yDB[[&Xde/aysx/pwgen/impl/KeinSZamAnfang.javaPK pyDzZ%|^de/aysx/pwgen/impl/KeinSZamEnde.classPK yD^Wyy$ede/aysx/pwgen/impl/KeinSZamEnde.javaPKYk