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();
}
}
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();
}
}
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;
}
}
}
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:
Java-Code
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)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
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));
}
}
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();
}
}