Passwort erzeugen mit Java

Wenn ein neuer Benutzer angelegt wird ist es sinnvoll, ein zufälliges Passwort zu generieren und dem Benutzer vorzuschlagen. Einen Passwortgenerator in Java zu erstellen ist eine Angelegenheit von wenigen Zeilen.

Inhaltsverzeichnis

Zufälliges alphanumerisches Passwort

In Java ist es recht simpel zufällige Zahlen zu erzeugen, was die Grundlage für ein zufälliges Passwort ist. In der Methode createPasswort(int length) im folgenden Beispiel wird so oft auf eine zufällige Position des Strings zugegriffen, bis die geforderte Länge erreicht ist. Da ein String intern durch ein char-Array repräsentiert wird, ist der Zugriff auf das Zeichen an einer bestimmten Position eine recht einfache Operation:

public static String createPassword(int length){
    final String allowedChars = "0123456789abcdefghijklmnopqrstuvwABCDEFGHIJKLMNOP!§$%&?*+#";
    SecureRandom random = new SecureRandom();
    StringBuilder pass = new StringBuilder(length);
    for (int i = 0; i < length; i++) {
        pass.append(allowedChars.charAt(random.nextInt(allowedChars.length())));
    }
    return pass.toString();
}

Der String allowedChars kann natürlich auch in eine static final Variable (Konstante) ausgelagert werden oder aus einer Konfiguration eingelesen werden. Um die Übersicht zu bewahren soll er in diesem Beispiel hardcoded in der Methode selbst bleiben. Die Java Virtual Machine wird die Variable nur ein mal erstellen und nicht wie man vielleicht annehmen könnte bei jedem Methodenaufruf.

Um tatsächlich nicht-reproduzierbare Zufallszahlen zu erzeugen wird hier die Klasse java.security.SecureRandom statt der Klasse java.util.Random verwendet. In der Javadoc der Klassen kann nachgelesen werden, warum das so ist ;).

Zufälliges numerisches Passwort (z.b. PIN-Code)

Ein numerisches Passwort zu erstellen ist noch einfacher, da man keine Menge von erlaubten chars benötigt. Die Methode nextInt() liefert ja ohnehin einen numerischen Wert.

public static String createPin(int length){
    SecureRandom random = new SecureRandom();
    StringBuilder pass = new StringBuilder(length);
    for (int i = 0; i < length; i++) {
        pass.append(random.nextInt(10));
    }
    return pass.toString();
}

Das Prinzip ist das selbe wie oben: es wird ein leerer StringBuilder erstellt und dann eine zufällige Zahl nach der anderen hinzugefügt, bis die gewünschte Länge erreicht ist.


Ähnliche Artikel