Java :: Aufgabe #72
5 Lösungen
Passwortgenerator mit Parametern
Anfänger - Java
von pocki
- 27.11.2014 um 18:11 Uhr
Erstelle ein Programm/Funktion welche/s ein zufälliges Passwort erzeugt.
Als Parameter soll die Länge sowie die Art der darin vorkommenden Zeichen übergeben werden können.
Zur Auswahl sollen stehen: Kleinbuchstaben, Großbuchstaben, Zahlen und Sonderzeichen.
Jede beliebige Kombination der Parameter soll möglich sein.
Als Parameter soll die Länge sowie die Art der darin vorkommenden Zeichen übergeben werden können.
Zur Auswahl sollen stehen: Kleinbuchstaben, Großbuchstaben, Zahlen und Sonderzeichen.
Jede beliebige Kombination der Parameter soll möglich sein.
Lösungen:
Von "eulerscheZhl" in Java übersetzt.
Java-Code
import java.util.Random; import java.util.Scanner; public class main { public static void main(String[] args) { Scanner in = new Scanner(System.in); System.out.print("Länge des Passworts: "); int length = Integer.parseInt(in.next()) ; System.out.print("Großbuchstaben verwenden (j/n): "); boolean upperCase = in.next().equals("j"); System. out.print("Kleinbuchstaben verwenden (j/n): "); boolean lowerCase = in.next().equals("j"); System.out.print("Ziffern verwenden (j/n): "); boolean digits = in.next() == "j"; System.out.print("Sonderzeichen verwenden (j/n): "); boolean specialChars = in.next().equals("j"); System.out.println(createPassword (lowerCase, upperCase, digits, specialChars, length)); } private static String createPassword(boolean lowerCase, boolean upperCase, boolean digits, boolean specialChar, int length) { String alphabet = ""; if (lowerCase) alphabet += "abcdefghijklmnopqrstuvwxyz"; if (upperCase) alphabet += "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; if (digits) alphabet += "0123456789"; if (specialChar) alphabet += "^!\"§$%&/()=?²³{[]}\\`´+*~#',.-;:_<>|"; if (alphabet.length() == 0) return "error"; StringBuilder result = new StringBuilder (); Random r = new Random (); while (result.length() < length) result.append(alphabet.charAt(r.nextInt(alphabet.length()))); return result.toString(); } }
Java-Code
package Passwortgenerator; /** * @author Sollder1 * @since 16.03.2016 * @version 1.0 * @category Main, Passwortgenerator */ public class Main { public static void main(String[] args) { System.out.println("Passwortgenerator 1.00 by Sollder1"); System.out.println(""); Einlesen_ausführen run = new Einlesen_ausführen(); run.Einlesen(); run.Ausführen(); } }
Java-Code
package Passwortgenerator; /** * @author Sollder1 * @since 16.03.2016 * @version 1.0 * @category Generator, Passwortgenerator */ public class Generator { public void k_only(int laenge) { while (laenge>=0) { //int [] nummern = new int[laenge]; char [] buchstaben = new char[laenge]; laenge = laenge -1; int count = laenge; while(count >= 0) { buchstaben[count]= (char) ('a' + 25*Math.random()); //Zufällige Charakter Kleinbuchstaben count--; } while(laenge >=0) { System.out.print(buchstaben [laenge]); laenge--; } } } public void g_only(int laenge) { while (laenge>=0) { //int [] nummern = new int[laenge]; char [] buchstaben = new char[laenge]; laenge = laenge -1; int count = laenge; while(count >= 0) { buchstaben[count]= (char) ('A' + 25*Math.random()); //Zufällige Charakter Großbuchstaben count--; } while(laenge >=0) { System.out.print(buchstaben [laenge]); laenge--; } } } public void z_only(int laenge) { int [] nummern = new int[laenge]; laenge = laenge -1; int count = laenge; while(count >= 0) { nummern[count]=(int) (Math.random()*10); count--; } while(laenge >=0) { System.out.print(nummern [laenge]); laenge--; } } public void sz_only (int laenge) { String [] sz_Zeichen = new String[laenge]; laenge = laenge -1; int count = laenge; while(count >= 0) { int x = (int) (Math.random()*5); if (x == 0 ) { sz_Zeichen[count] = "*"; } if (x == 1 ) { sz_Zeichen[count] = ":"; } if (x == 2 ) { sz_Zeichen[count] = "="; } if (x == 3 ) { sz_Zeichen[count] = "#"; } if (x == 4 ) { sz_Zeichen[count] = "'"; } if (x == 5 ) { sz_Zeichen[count] = ";"; } count--; } while(laenge >=0) { System.out.print(sz_Zeichen [laenge]); laenge--; } } public void k_g(int laenge) { char [] buchstaben = new char[laenge];; int zo = laenge-1; int k_buch = (int) (Math.random()*zo + 1); int g_buch = laenge - k_buch; int tausch = (int) (Math.random()*1); if(tausch == 0) { k_only(k_buch); g_only(g_buch); } if(tausch == 1) { g_only(g_buch); k_only(k_buch); } } public void k_z(int laenge) { int zo = laenge-1; int z_num = (int) (Math.random()*zo + 1); int k_buch = laenge - z_num; int tausch = (int) (Math.random()*1); if(tausch == 0) { k_only(k_buch); z_only(z_num); } if(tausch == 1) { z_only(z_num); k_only(k_buch); } } public void k_sz(int laenge) { int zo = laenge-1; int sz_son = (int) (Math.random()*zo + 1); int k_buch = laenge - sz_son; int tausch = (int) (Math.random()*1); if(tausch == 0) { k_only(k_buch); sz_only(sz_son); } if(tausch == 1) { sz_only(sz_son); k_only(k_buch); } } public void g_z(int laenge) { int zo = laenge-1; int g_buch = (int) (Math.random()*zo + 1); int z_num = laenge - g_buch; int tausch = (int) (Math.random()*1); if(tausch == 0) { g_only(g_buch); z_only(z_num); } if(tausch == 1) { z_only(z_num); g_only(g_buch); } } public void z_sz(int laenge) { int zo = laenge-1; int sz_son = (int) (Math.random()*zo + 1); int z_num = laenge - sz_son; int tausch = (int) (Math.random()*1); if(tausch == 0) { sz_only(sz_son); z_only(z_num); } if(tausch == 1) { z_only(z_num); sz_only(sz_son); } } public void g_sz(int laenge) { int zo = laenge-1; int sz_son = (int) (Math.random()*zo + 1); int g_buch = laenge - sz_son; int tausch = (int) (Math.random()*1); if(tausch == 0) { sz_only(sz_son); g_only(g_buch); } if(tausch == 1) { g_only(g_buch); sz_only(sz_son); } } public void k_g_z(int laenge) { while(laenge > 0) { int what = (int) ((Math.random()*3)+1);; if(what == 1) { k_only(1); } if(what == 2) { g_only(1); } if(what == 3) { z_only(1); } laenge --; } } public void k_g_z_sz(int laenge) { while(laenge > 0) { int what = (int) ((Math.random()*4)+1); if(what == 1) { sz_only(1); } if(what == 2) { k_only(1); } if(what == 3) { g_only(1); } if(what == 4) { z_only(1); } laenge --; what = 0; } } public void sz_g_z(int laenge) { while(laenge > 0) { int what = (int) ((Math.random()*3)+1); if(what == 1) { sz_only(1); } if(what == 2) { g_only(1); } if(what == 3) { z_only(1); } laenge --; what = 0; } } public void k_g_sz(int laenge) { while(laenge > 0) { int what = (int) ((Math.random()*3)+1); if(what == 1) { sz_only(1); } if(what == 2) { k_only(1); } if(what == 3) { g_only(1); } laenge --; what = 0; } } public void k_sz_z(int laenge) { while(laenge > 0) { int what = (int) ((Math.random()*3)+1); if(what == 1) { sz_only(1); } if(what == 2) { k_only(1); } if(what == 3) { z_only(1); } laenge --; what = 0; } } }
Java-Code
package Passwortgenerator; import java.util.Scanner; /** * @author Sollder1 * @since 16.03.2016 * @version 1.0 * @category Engabe_Ausführung, Passwortgenerator */ public class Einlesen_ausführen { int laenge; boolean Kleinbuchstaben; boolean Großbuchstaben; boolean Zahlen; boolean Sonderzeichen; public void Einlesen (){ Scanner in = new Scanner(System.in); System.out.print("Laenge des Passwortes: "); laenge = in.nextInt(); if(laenge == 0) { System.out.println("Error 1: Mindestanzahl ist 1"); System.out.print("Laenge des Passwortes: "); laenge = in.nextInt(); } System.out.print("Sollen Kleinbuchstaben enthalten sein? [true/false] "); Kleinbuchstaben = in.nextBoolean(); System.out.print("Sollen Großbuchstaben enthalten sein? [true/false] "); Großbuchstaben = in.nextBoolean(); System.out.print("Sollen Zahlen enthalten sein? [true/false] "); Zahlen = in.nextBoolean(); System.out.print("Sollen Sonderzeichen enthalten sein? [true/false] "); Sonderzeichen = in.nextBoolean(); } public void Ausführen() { Generator gen = new Generator(); //----------------------------mit keiner eingabe if (Kleinbuchstaben == false && Großbuchstaben == false && Zahlen == false && Sonderzeichen == false) { System.out.println("Error 2: Es müssen Generationsvorschriften gemacht werden."); } //-------------------------mit einer Eingabe if (Kleinbuchstaben == true && Großbuchstaben == false && Zahlen == false && Sonderzeichen == false) { gen.k_only(laenge); } if (Kleinbuchstaben == false && Großbuchstaben == false && Zahlen == true && Sonderzeichen == false) { gen.z_only(laenge); } if (Kleinbuchstaben == false && Großbuchstaben == true && Zahlen == false && Sonderzeichen == false) { gen.g_only(laenge); } if (Kleinbuchstaben == false && Großbuchstaben == false && Zahlen == false && Sonderzeichen == true) { gen.sz_only(laenge); } //---------------------------------mit zwei Eingaben if (Kleinbuchstaben == true && Großbuchstaben == true && Zahlen == false && Sonderzeichen == false) { gen.k_g(laenge); } if(Kleinbuchstaben == true && Großbuchstaben == false && Zahlen == true && Sonderzeichen == false) { gen.k_z(laenge); } if(Kleinbuchstaben == true && Großbuchstaben == false && Zahlen == false && Sonderzeichen == true) { gen.k_sz(laenge); } if(Kleinbuchstaben == false && Großbuchstaben == true && Zahlen == true && Sonderzeichen == false) { gen.g_z(laenge); } if(Kleinbuchstaben == false && Großbuchstaben == true && Zahlen == false && Sonderzeichen == true) { gen.g_sz(laenge); } if(Kleinbuchstaben == false && Großbuchstaben == false && Zahlen == true && Sonderzeichen == true) { gen.z_sz(laenge); } //-----------------------------------mit 3 Angaben if (Kleinbuchstaben == true && Großbuchstaben == true && Zahlen == true && Sonderzeichen == false) { gen.k_g_z(laenge); } if (Kleinbuchstaben == false && Großbuchstaben == true && Zahlen == true && Sonderzeichen == true) { gen.sz_g_z(laenge); } if (Kleinbuchstaben == true && Großbuchstaben == false && Zahlen == true && Sonderzeichen == true) { gen.k_sz_z(laenge); } if (Kleinbuchstaben == true && Großbuchstaben == true && Zahlen == false && Sonderzeichen == true) { gen.k_g_sz(laenge); } //-------------------------------------mit 4 Angaben if (Kleinbuchstaben == true && Großbuchstaben == true && Zahlen == true && Sonderzeichen == true) { gen.k_g_z_sz(laenge); } } }
Die Zeichenabfrage hab ich mir gespart, kann ja jeder gerne nachträglich einfügen.
mögliche Ausgabe:
SiCuSoft,Thomas Etzelsdorfer
mögliche Ausgabe:
Bitte geben Sie die Länge des Passwortes ein:
32
1. Passwort aus Kleinbuchstaben: snvhwbnubtflblraemtlqwhkuuqlpwtw
2. Passwort aus Grossbuchstaben: JMJMTWLVKNSRWWDIGHZZAFSOHXEAPVWF
3. Passwort aus Zahlen: 93830054787410324587924324808228
4. Passwort aus Sonderzeichen: #)).(++-$"+'-"+(!*%)"".%#&*%#+
5. Passwort aus Buchstaben (Gross & Klein): QFUCgdUOGVXcCKpELxOLqzdlldCfbiaL
6. Passwort aus Buchstaben (Gross & Klein & Zahlen): IRpdkiMvrsaGUO65TQwfgQ7qJntOzUt0
7. Passwort aus Gross & Klein & Zahlen & Sonderz.: I"(RH%U9mtq,$B4CQ7F#7,nxpCL"Jv1L
BUILD SUCCESSFUL (total time: 3 seconds)
Java-Code
package eu.sicusoft.etzelsdorfer.demos; import java.util.Random; import java.util.Scanner; /** * 2016 © SiCuSoft<br> * Password Creator Class * Diese Klasse stellt eine <code>public</code> Methode zur Verfügung <br>{@link getPwdLetter(Auswahl auswahl, int zeichenAnzahl)}<br>die * das gewuenschte Passwort ( Zeichenauswahl und Laenge ) ausgibt! * @author Etzelsdorfer Thomas * @since 2016-10-14 * @version 1.1.0 * ( Sonderzeichen hinzu gefügt ) * @version 1.0.0 * ( erstellung der klasse ) * */ public class CreatePwd { private static final int a = 97, z = 122 + 1; private static final int A = 65, Z = 90 + 1; private static final int rufZ = 33, backSlash = 46 + 1; private static final int z0 = 48, z9 = 57 + 1; private Random r; public enum Auswahl { KLEINBUCHSTABEN, GROSSBUCHSTABEN, ZAHLEN, KLEIN_GROSSBUCHSTABEN, BUCHSTABEN_ZAHLEN, BUCHSTABEN_ZAHLEN_SONDERZEICHEN, SONDERZEICHEN } public static void main(String[] args) { CreatePwd pwd = new CreatePwd(); Scanner scan = new Scanner(System.in); System.out.println("Bitte geben Sie die Länge des Passwortes ein: "); int laenge = scan.nextInt(); String ausgabe = String.format("\n1. %-50s %-10s \n2. %-50s %-10s \n3. %-50s %-10s \n4. %-50s %-10s \n5. %-50s %-10s \n6. %-50s %-10s \n7. %-50s %-10s", "Passwort aus Kleinbuchstaben:", pwd.getPwdLetter(Auswahl.KLEINBUCHSTABEN, laenge), "Passwort aus Grossbuchstaben:", pwd.getPwdLetter(Auswahl.GROSSBUCHSTABEN, laenge), "Passwort aus Zahlen:", pwd.getPwdLetter(Auswahl.ZAHLEN, laenge), "Passwort aus Sonderzeichen:", pwd.getPwdLetter(Auswahl.SONDERZEICHEN, laenge), "Passwort aus Buchstaben (Gross & Klein):", pwd.getPwdLetter(Auswahl.KLEIN_GROSSBUCHSTABEN, laenge), "Passwort aus Buchstaben (Gross & Klein & Zahlen):", pwd.getPwdLetter(Auswahl.BUCHSTABEN_ZAHLEN, laenge), "Passwort aus Gross & Klein & Zahlen & Sonderz.:", pwd.getPwdLetter(Auswahl.BUCHSTABEN_ZAHLEN_SONDERZEICHEN, laenge)); System.out.println(ausgabe); } /** * Methode gibt das erstellt Pwd bestehend aus Kleinbuchstaben zurük * * @param zeichenAnzahl, Anzahl der Zeichen * @param auswahl Auswahl der Zeichen (enum, Aufruf: * <code>Auswahl.KLEINBUCHSTABEN</code> * @return pwd */ public String getPwdLetter(Auswahl auswahl, int zeichenAnzahl) { StringBuilder sb = new StringBuilder(); // Stringbuilder für die einzelenen zufälligen Charakter char[] available1 = null; switch (auswahl) { case KLEINBUCHSTABEN: // nur kleinbuchstaben available1 = aTOz(); break; case GROSSBUCHSTABEN: // nur grossbuchstaben available1 = ATOZ(); break; case ZAHLEN: // nur zahlen available1 = zahlen(); break; case KLEIN_GROSSBUCHSTABEN: // gross und kleinbuchstaben available1 = concat(aTOz(), ATOZ(), null); break; case SONDERZEICHEN: // nur sonderzeichen available1 = soTOso(); break; case BUCHSTABEN_ZAHLEN: // gross, kleinbuchstaben und Zahlen available1 = concat(aTOz(), ATOZ(), zahlen()); break; case BUCHSTABEN_ZAHLEN_SONDERZEICHEN: // gross, kleinbuchstaben, zahlen, sonderzeichen char[] c = concat(aTOz(), ATOZ(), zahlen()); char[] c1 = soTOso(); available1 = concat(c, c1, null); break; } // erstellung des passwortes r = new Random(); int n = 0; // erstelle zeichen for (int i = 0; i < zeichenAnzahl; i++) { n = r.nextInt(available1.length); sb.append(available1[n]); } // rückgabe erstelltes pwd return sb.toString(); } /** * Methode verbindet mehrere arrays miteinander * @param a1 * @param a2 * @param a3 * @return concated array */ private char[] concat(char[] a1, char[] a2, char[] a3) { StringBuilder sb = new StringBuilder((a3 == null) ? a1.length + a2.length : a1.length + a2.length + a3.length); if (a3 == null) { sb.append(a1); sb.append(a2); } else { sb.append(a1); sb.append(a2); sb.append(a3); } return sb.toString().toCharArray(); } // private helper private char[] aTOz() { return getAvailableChar(a, z); } private char[] ATOZ() { return getAvailableChar(A, Z); } private char[] soTOso() { return getAvailableChar(rufZ, backSlash); } private char[] zahlen() { return getAvailableChar(z0, z9); } /** * Methode gibt ein char Array zurück die mit Zeichen aus der <br> * Ascii Tabelle befüllt wurde.<br> * * @param startAscii * @param endAscii * @return Verfügbare Zeichen aus der Ascii Tabelle */ private char[] getAvailableChar(int startAscii, int endAscii) { char[] c = new char[endAscii % startAscii]; for (int i = 0; startAscii < endAscii; i++) { c[i] = (char) startAscii; startAscii++; } return c; } }
SiCuSoft,Thomas Etzelsdorfer
Java-Code
import java.util.*; import java.util.regex.*; class passwort { public static String[] alphabet(String parameter) { String alpha = ""; String[] returnArray = new String[2]; ArrayList<String> numbers = new ArrayList<String>(); Pattern p = Pattern.compile("\\d+"); Matcher m = p.matcher(parameter); while (m.find()) { numbers.add(m.group()); } returnArray[0] = numbers.get(0); if(parameter.contains("K") || parameter.contains("k")) { alpha = alpha.concat("abcdefghijklmnopqrstuvwxyz"); } if(parameter.contains("G") || parameter.contains("g")) { alpha = alpha.concat("ABCDEFGHIJKLMNOPQRSTUVWXYZ"); } if(parameter.contains("Z") || parameter.contains("z")) { alpha = alpha.concat("1234567890"); } if(parameter.contains("S") || parameter.contains("s")) { alpha = alpha.concat("!§$%&?#+*-_"); } returnArray[1] = alpha; return returnArray; } public static void passGen(String[] alphabet) { int länge = Integer.parseInt(alphabet[0]); String alpha = alphabet[1]; String passwort = ""; for(int i = 0; i < länge; i++) { Random random = new Random(); int index = random.nextInt(alpha.length()); passwort = passwort.concat(String.valueOf(alpha.charAt(index))); } System.out.println("\nGeneriertes Passwort: " + passwort); } public static void main (String[] args) throws java.lang.Exception { System.out.print("Bitte geben Sie die folgenden Parameter direkt hintereinander ein (Beispiel: 8KGZS):\n\n1. Länge des Passwortes als Zahl\n2. K für Kleinbuchstaben\n3. G für Großbuchstaben\n4. Z für Zahlen\n5. S für Sonderzeichen\n"); Scanner reader = new Scanner(System.in); String parameter = reader.next(); reader.close(); passGen(alphabet(parameter)); } }
Java-Code
import java.util.*; public class Passwortgenerator { public static void main (String[] args) { Scanner scanner = new Scanner(System.in); String auswahl = ""; String passwort = ""; int counter = 0; System.out.println("--- Passwortgenerator ---"); System.out.print("Länge?\t"); int länge = scanner.nextInt(); System.out.println("Vorkommende Zeichen:"); System.out.println("Kleinbuchstaben\ttrue/false?"); Boolean Klein = scanner.nextBoolean(); System.out.println("Großbuchstaben\ttrue/false?"); Boolean Groß = scanner.nextBoolean(); System.out.println("Zahlen\ttrue/false?"); Boolean Zahlen = scanner.nextBoolean(); System.out.println("Sonderzeichen\ttrue/false?"); Boolean Soz = scanner.nextBoolean(); if(Klein == true) { auswahl += "abcdefghijklmnopqrstuvw"; counter += 26; } if(Groß == true) { auswahl += "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; counter += 26; } if(Zahlen == true) { auswahl += "0123456789"; counter += 10; } if(Soz == true) { auswahl += "!?=()/%&$§{}[]<>|,.;:-_+-*#"; counter += 27; } Random zufall = new Random(); for(int i = 0; i < länge; i++) { int z = zufall.nextInt(counter); passwort += auswahl.charAt(z); } System.out.println("Passwort:\t" + passwort); scanner.close(); } }