Java :: Aufgabe #72 :: Lösung #3

5 Lösungen Lösungen öffentlich
#72

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.
#3
vote_ok
von thet1983 (800 Punkte) - 14.10.2016 um 12:06 Uhr
Die Zeichenabfrage hab ich mir gespart, kann ja jeder gerne nachträglich einfügen.
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)


Quellcode ausblenden 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

Kommentare:

Für diese Lösung gibt es noch keinen Kommentar

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben