Hilfe PW Generator

c_sidi90

Top Contributor
Hallo ich hoffe ihr könnt mir helfen, ich versuche ein PW generator zu erstellen wo der Anwender die gewünschte Länge und die anzahl an Buchstaben festlegen kann. Das ganze soll nich wirklich OOP sein also nicht aufregen 😛 Das mit der Länge passt aber ich hab keine Ahnung wie ich bei der Ausgabe noch die zufallsbuchstaben reinbekomme in die Ausgabe des Zufallsarrays. Hier mein Code !

Java:
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.util.Random;

import javax.xml.bind.ParseConversionEvent;

public class Generator {
	public static void main (String[]args)throws IOException{
		
		
		
		//Deklaration der Variablen zum speichern der Benutzereingabe
		String laengeString="";
		String mindestzahlString="";
		String mindestbuchstabenString="";
		
		//Deklaration und initialisierung der Variablen zum erstellen des Zufallscodes
		int laenge=0;
		long mindBuchstaben=0;
		

		
		//Erstellung der Benutzereingabe..
		InputStreamReader Wandler = new InputStreamReader(System.in);
		BufferedReader Eingabe = new BufferedReader(Wandler);
		
		
		System.out.println ("Passwort-Generator");
		
		//Benutzerabfrage
		System.out.println ("Bitte geben Sie die gewünschte Länge ein...");
		laengeString = Eingabe.readLine();
		
		
		System.out.println ("Bitte geben Sie die gewünschte Mindestanzahl an Buchstaben ein...");
		mindestbuchstabenString = Eingabe.readLine();
		
		//Umwandlung der Benutzereingaben für die zufällige Generierung.
		laenge = Integer.parseInt(laengeString);
		mindBuchstaben = Long.parseLong (mindestbuchstabenString);
		
		
		//Generiert das Passwort
		System.out.println ("Ihr Passwort wird generiert...");
		
		//Erzeugt ein Array mit dem Index von "Laenge" (Benutzereingabe maximale Länge
		int[]passwort = new int[laenge];
		
		
		//Füllt das Array passwort mit Zufallszahlen bis (gewünschte Länge)
		for (int i=0; i<laenge; i++) {
			passwort[i] = Long.toString(mindBuchstaben)+ (int)(Math.random()*laenge);
			
			//Ausgabe der Zufallszahlen
			System.out.print (passwort[i]);
		
		}
		
	}
}

P.S Ich habe die Buchstaben Variable als Long deklariert weil ich es mit der Long.toString Methode machen wollte, aber es funktioniert nicht, ich kenne die fORMEL für die Ausgabe im System.out nicht...
 
Long.toString() gibt die Stringrepresenation einer Long zurück.

Also die Zahl als String. Das wandelt nicht ein 30 in ein A oder so.

Dafür brauchst du ein Ascii wandler

Das Erstellen deiner Random Zahl siehst höchstens geraten aus als überlagt, was das Prog an der Stelle machen soll.

Ich würde vorschlagen du nimmst ein Array mit allen buchstaben, die im PW Vorkommen sollen.

Wenn dann die min. Anzahl von Buchstanebn im PW X ist und die gesamtlänge Y dann würde ich zunächst

Per Zufall Y-X mal eine Zahl einfliesen lassen und den Rest per Zufall aus dem Array der möglichen buchstaben auslesen. Die zahlen sollen ja Verteilt über das PW sein, dann müsste man bei jedem Schleifendurchlauf von Y eine ja nein entscheidung treffen, ob eine Zahl kommt oder ein Buchstabe.


Gruß,

Martin
 
was soll denn überhaupt passieren?
Erklärungen lieferst du fast keine, der Ausgabe im Programmcode soll mindBuchstaben die Anzahl an Buchstaben im Passwort sein, Rest Zahlen?

mindBuchstaben sorgt also dafür, dass manche passwort Buchstaben sind, andere Zahlen,
aber mindBuchstaben wird doch nicht ich jedes einzelne passwort eingerechnet? weder als Long noch als String, noch als sonstwas,

das i der Schleife kannst du verwenden:
Java:
if (i < mindBuchstaben ) {
  passwort[i] = zufälliger Buchstabe
} else {
  passwort[i] = zufällige Zahl
}
hilft dir das weiter?

-----

wenn du jetzt fragst: 'wie erstellte ich einen zufälligen Buchstaben?'
dann antworte ich darauf:
wäre gut dass in einem einfachen Programm "einen zufälligen Buchstaben erstellen" zu testen,
nicht mitten in einem komplizierten anderen Programm um Passwörter, Schleife, Benutzereingaben usw'

vergiss in diesem Fall dein gesamtes Programm und konzentriere dich auf:
Java:
public class Test {

   public static void main(String[] args) {
      char c = zufälliger Buchstabe;
      System.out.println(c);
   }
}
 
vielen Dank für eure Tipps! Dann hat google mich mit der long.toString Methode wohl auf den falschenweg geführt. Das Array mit den Zufallszahlen füllen war für mich halt die einfachste Methode mit der math.random methode welche ich kannte. Die erzeugung eines Zufallsbuchstabens ist mir jedoch leider nicht bekannt, wäre für weitere Hilfe dankbar
 
Ein Buchstabe (char) kann auch als Zahl (int) ausgedrückt werden. Siehe dir dazu mal eine ASCII Tabelle an:
ASCII-Tabelle

Java:
int i = 71;
char c = (char) i; // 'G'

Jetzt musst du nur noch zufällig Zahlen im Wertebereich von 33 bis 126 (um im druckbaren Bereich zu bleiben) erzeugen
 
Danke habs schon gefunden, also kann ich das Array mit den Zufalls zahlen und ein zusätzliches Array für Zufallsbuchstaben erstellen und beide Arrays ausgeben? Oder würde dies zu kompliziert und falsch sein?

Sorry aber bin noch absoluter Neuling..
 
Mach doch einfach alles in einem Schritt.

Java:
        char[] passwort = new char[laenge];
        
        
        //Füllt das Array passwort mit Zufallszahlen bis (gewünschte Länge)
        for (int i=0; i<laenge; i++) {
             int r = <erzeugeZufallszahl>;
             passwort[i] = (char) r;
        }
        System.out.println(String.valueOf(passwort));
 
Zuletzt bearbeitet von einem Moderator:
Ich habs irgendwie hinbekommen, mit Sicherheit eine sehr unschöne Lösung aber der Zweck ist erfüllt, ich bin ja noch am pauken 😉

Java:
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.util.Random;

import javax.xml.bind.ParseConversionEvent;

public class Generator {
	public static void main (String[]args)throws IOException{
		
		
		
		//Deklaration der Variablen zum speichern der Benutzereingabe
		String laengeString="";
		String mindestzahlString="";
		String mindestbuchstabenString="";
		
		//Deklaration und initialisierung der Variablen zum erstellen des Zufallscodes
		int laenge=0;
		int mindBuchstaben=0;
		
	

		
		//Erstellung der Benutzereingabe..
		InputStreamReader Wandler = new InputStreamReader(System.in);
		BufferedReader Eingabe = new BufferedReader(Wandler);
		
		
		System.out.println ("Passwort-Generator");
		
		//Benutzerabfrage
		System.out.println ("Bitte geben Sie die gewünschte Länge ein...");
		laengeString = Eingabe.readLine();
		
		
		System.out.println ("Bitte geben Sie die gewünschte Mindestanzahl an Buchstaben ein...");
		mindestbuchstabenString = Eingabe.readLine();
		
		//Umwandlung der Benutzereingaben für die zufällige Generierung.
		laenge = Integer.parseInt(laengeString);
		mindBuchstaben = Integer.parseInt (mindestbuchstabenString);
		
		//Zieht die Anzahl an gewünschten Buchstaben ab damit der Rest Zahlen sind
		laenge = laenge-mindBuchstaben;
		
		//Generiert das Passwort
		System.out.println ("Ihr Passwort wird generiert...");
		
		//Erzeugt ein Array mit dem Index von "Laenge" (Benutzereingabe maximale Länge
		int[]passwort = new int[laenge];
		//Erzeugt ein Array mit dem Index von"mindestBuchstaben"(Benutzereingabe)
	
		
		//Füllt das Array passwort mit Zufallszahlen bis (gewünschte Länge)
		for (int i=0; i<laenge; i++) {
			passwort[i] =  (int)(Math.random()*laenge);
			
			//Deklariert die Variable c und weist einen Zufallsbuchstaben zu
			char c = 'a';
			c = (char) (Math.random()*26 + 'a');
	
			//Ausgabe der Zufallszahlen
			System.out.print (c);
			//Ausgabe der Zufallsbuchstaben
			System.out.print (passwort[i]);
			
			
			
		}
		
	}
 
Es soll bei der Ausgabe aber ja Zufallszahlen gemischt mit Buchstaben ausgeben werden, nicht NUR Buchstaben

Du hast dir aber schon die ASCII Tabelle angesehn?

Java:
int i = 52;
char c = (char) i

Was kommt bei raus?

Zum Einlesen der Benutzereingabe eignet sich auch sehr gut die Klasse Scanner, da kannst du dann auch gleich eine Zahl einlesen lassen und musst nicht erst rumkonvertieren.
 
doch noch ein wenig falsch, mh vlt kann mir jemand der Zeit hat ja mal die Aufgabe in einem neuen Code vorstellen und die Schritte kommentieren, wäre sehr dankbar
 
Kannst ja mal gucken was du hieran nicht verstehst und wo z.B. ein Problem mit diesem code besteht.
Java:
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
import java.util.Scanner;

public class PasswortGenerator {

	public static void main(String[] args) {

		Scanner scanner = new Scanner(System.in);
		System.out.println("Passwort-Generator");

		System.out.println("Bitte geben Sie die gewünschte Länge ein...");
		int length = scanner.nextInt();
		System.out
				.println("Bitte geben Sie die gewünschte Mindestanzahl an Buchstaben ein...");
		int minLetters = scanner.nextInt();
		System.out.println("Ihr Passwort wird generiert...");

		List<Character> chars = new ArrayList<Character>(length);

		Random rnd = new Random();

		int lettersGenerated = 0;
		for (int i = 0; i < length; i++) {
			if (lettersGenerated < minLetters) {
				int r;
				do {
					r = rnd.nextInt(122);
				} while (r < 65 || r > 122);
				char c = (char) r;
				chars.add(c);
				lettersGenerated++;
			} else {
				int r;
				do {
					r = rnd.nextInt(122);
				} while (r < 33 || r > 122);
				char c = (char) r;
				chars.add(c);
			}
		}
	
		Collections.shuffle(chars);
		StringBuilder sb = new StringBuilder();
		for (char c : chars) {
			sb.append(c);
		}

		System.out.println("Ihr Passwort: " + sb.toString());

	}
}
 

Zurück
Oben