uebung4/Passwort_Check.java

142 lines
4.8 KiB
Java

import java.util.Scanner;
/**
* Dieses Programm prüft anhand von fünf Bedingungen, ob ein Passwort sicher
* ist:
* - Mindestens 20 Zeichen lang
* - Enthält mindestens drei Kleinbuchstaben
* - Enthält mindestens drei Großbuchstaben
* - Enthält mindestens drei Ziffern
* - Enthält mindestens drei Sonderzeichen
*/
public class Passwort_Check {
/**
* Prüft, ob das Passwort mindestens 20 Zeichen lang ist.
*
* @param password Das zu prüfende Kennwort.
* @return True, wenn das Kennwort mindestens 20 Zeichen lang ist, sonst false.
*/
public static boolean checkLaenge(String passwort) {
if (passwort == null) {
return false;
}
return passwort.length() >= 20;
}
/**
* Prüft, ob das Passwort mindestens drei Kleinbuchstaben enthält.
*
* @param password Das zu prüfende Kennwort.
* @return True, wenn das Kennwort mindestens drei Kleinbuchstaben enthält,
* sonst false.
*/
public static boolean checkKleinBuchstaben(String passwort) {
if (passwort == null) {
return false;
}
return passwort.matches(".*[a-z].*[a-z].*[a-z].*");
}
/**
* Prüft, ob das Passwort mindestens drei Großbuchstaben enthält.
*
* @param password Das zu prüfende Kennwort.
* @return True, wenn das Kennwort mindestens drei Großbuchstaben enthält, sonst
* false.
*/
public static boolean checkGrossBuchstaben(String passwort) {
if (passwort == null) {
return false;
}
return passwort.matches(".*[A-Z].*[A-Z].*[A-Z].*");
}
/**
* Prüft, ob das Passwort mindestens drei Ziffern enthält.
*
* @param password Das zu prüfende Kennwort.
* @return True, wenn das Kennwort mindestens dreistellig ist, sonst false.
*/
public static boolean checkZiffer(String passwort) {
if (passwort == null) {
return false;
}
return passwort.matches(".*[0-9].*[0-9].*[0-9].*");
}
/**
* Prüft, ob das Passwort mindestens drei Sonderzeichen enthält.
*
* @param password Das zu prüfende Kennwort.
* @return True, wenn das Kennwort mindestens drei Sonderzeichen enthält, sonst
* false.
*/
public static boolean checkSonderZeichen(String passwort) {
if (passwort == null) {
return false;
}
// \\x20-\\x2F -> SP, !, ", #, $, %, &, ', (, ), *, +, ,, -, ., /
// \\x3A-\\x40 -> :, ;, <, =, >, ?, @
// \\x5B-\\x60 -> [, \, ], ^, -, `
// \\x7B-\\x7E -> {, |, }, ~
// \\x80 -> €
String reg = "[\\x20-\\x2F\\x3A-\\x40\\x5B-\\x60\\x7B-\\x7E\\x80]";
return passwort.matches(".*" + reg + ".*" + reg + ".*" + reg + ".*");
// String negReg = "[^A-Za-z0-9\\x00-\\x1F\\x7F]";
// return passwort.matches(".*"+negReg+".*"+negReg+".*"+negReg+".*");
// return
}
/**
* Hauptmethode, die den Benutzer zur Eingabe eines Passworts auffordert und
* dessen Sicherheit anhand der definierten Bedingungen überprüft.
*
* @param args Kommandozeilenargumente (werden in diesem Programm nicht
* verwendet).
*/
public static void main(String[] args) {
// Variablen werden initialisiert
String passwort = null;
boolean check = false; // Ein boolean das anzeigt, ob ein Passwort sicher ist
Scanner in = new Scanner(System.in);
System.out.println("Geben Sie ein Passwort zur überprüfung ein:");
passwort = in.nextLine();
// Schleife beinhaltet die Überprüfung des Passworts auf die einzelnen Bedingungen
// s wie die wiederholung des Vorgangs bei nicht sicherem Passwort.
do {
if (!checkLaenge(passwort)) {
System.out.println("Passwort ist zu kurz!");
} else if (!checkKleinBuchstaben(passwort)) {
System.out.println("Es fehlen Kleinbuchstaben!");
} else if (!checkGrossBuchstaben(passwort)) {
System.out.println("Es fehlen Großbuchstaben!");
} else if (!checkZiffer(passwort)) {
System.out.println("Es fehlen Ziffern!");
} else if (!checkSonderZeichen(passwort)) {
System.out.println("Es fehlen Sonderzeichen!");
} else {
System.out.println("Passwort ist sicher.");
check = true;
}
if (check == false) {
System.out.println("Geben Sie ein verbessertes Passwort zur überprüfung ein:");
passwort = in.nextLine();
}
} while (check == false);
// ende des Programms
System.out.println("...und Tschüss");
in.close();
}
}