Crea una clase Password que tenga como atributo un String que representa una contraseña.
La clase Password contendrá los siguientes constructores:
- Constructor por defecto que genera una contraseña de longitud 8.
- Constructor con un parámetro de tipo int. Este parámetro indica la longitud de la contraseña que se va a crear.
Las contraseñas en ambos casos se generan al azar y contendrán letras mayúsculas, letras minúsculas, dígitos y los caracteres . (punto) y _ (guión bajo).
La clase Password contendrá un método llamado esFuerte() que comprueba si la contraseña es fuerte o no según estas normas:
- La longitud es como mínimo de 8 caracteres.
- Contiene como mínimo dos letras mayúsculas, dos letras minúsculas, un dígito y al menos
un punto o un guión bajo.
El método esFuerte() devuelve un boolean indicando si la contraseña es fuerte o no.
La clase contendrá también un método modificarContraseña() para cambiar una contraseña ya existente. El método modificarContraseña() pide por teclado un String que contenga una nueva contraseña. Si la contraseña introducida es fuerte se modifica la contraseña actual. Si no es fuerte se deja la contraseña actual sin modificar. El método devuelve true si se ha modificado la contraseña y false en caso contrario.
El valor de una contraseña solo se podrá modificar mediante el método modificarContraseña().
Además de estos métodos puedes añadir a la clase los métodos que consideres necesarios.
Una vez creada la clase Password escribe un programa para probar el funcionamiento de la clase
Solución :
//Clase Password
import java.util.Random;
import java.util.Scanner;
/**
*
* @author enrique
*/
public class Password {
private String contraseña;
//Constructor por defecto
//Crea una contraseña aleatoria de longitud 8
//Para obtener la contraseña invoca al constructor con parámetros y le envía la longitud
public Password() {
this(8);
}
//Constructor con parámetros
//Crea una contraseña aleatoria con una longitud que recibe como parámetro
public Password(int longitud) {
contraseña = generaPassword(longitud);
}
//Método get
public String getContraseña() {
return contraseña;
}
//Esta clase no tendrá método set para la contraseña.
//El valor de la contraseña solo se puede cambiar mediante el método modificarContraseña
//Método que genera las contraseñas aleatorias
//Se trata de un método privado para que no pueda ser invicado desde fuera de lal clase
private String generaPassword(int longitud) {
Random rnd = new Random();
StringBuilder password = new StringBuilder();
char caracter;
int digito;
for (int i = 0; i < longitud; i++) {
//Se obtiene un número al azar del 0 al 4.
//Según este número se obtiene una mayúscula, minúscula, número, punto o guión bajo
switch (rnd.nextInt(5)) {
case 0:
caracter = (char) (rnd.nextInt('Z' - 'A' + 1) + 'A');//obtenemos una mayúscula al azar
password.append(caracter);
break;
case 1:
caracter = (char) (rnd.nextInt('z' - 'a' + 1) + 'a'); //obtenemos una minúscula al azar
password.append(caracter);
break;
case 2:
digito = rnd.nextInt(10); //obtenemos un dígito del 0 al 9
password.append(digito);
break;
case 3:
password.append('.'); //añadimos un punto
break;
case 4:
password.append('_'); //añadimos un guión bajo
break;
}
}
return password.toString();
}
//Método que comprueba si la contraseña es fuerte o no
public boolean esFuerte() {
int mayusculas = 0;
int minusculas = 0;
int digitos = 0;
int puntos = 0;
int guiones = 0;
if (contraseña.length() < 8) {
return false;
}
for (int i = 0; i < contraseña.length(); i++) {
if (contraseña.charAt(i) >= 'a' && contraseña.charAt(i) <= 'z') {
minusculas++;
} else if (contraseña.charAt(i) >= 'A' && contraseña.charAt(i) <= 'Z') {
mayusculas++;
} else if (contraseña.charAt(i) >= '0' && contraseña.charAt(i) <= '9') {
digitos++;
} else if (contraseña.charAt(i) == '.') {
puntos++;
} else if (contraseña.charAt(i) == '_') {
guiones++;
}
}
if (mayusculas >= 2 && minusculas >= 2 && digitos >= 1 && puntos >= 1 && guiones >= 1) {
return true;
}
return false;
}
//método para modificar una contraseña
//Se introduce una contraseña por teclado
//si la contraseña introducida es fuerte se modifica la contraseña actual
//Si no es fuerte, la contraseña actual no se modifica
public boolean modificarContraseña(){
Scanner sc = new Scanner(System.in);
String cadena = contraseña; //guardamos la contraseña actual
System.out.println("Modificar la contraseña");
System.out.print("Introduzca nueva contraseña: ");
contraseña = sc.nextLine();
if(esFuerte()){
return true;
}
contraseña = cadena; //si no es fuerte recuperamos la contraseña original
return false;
}
}//Fin clase Password
Clase principal para probar la clase Password
//Clase principal
public class ClasePasswordJava {
public static void main(String[] args) {
//Se crea una contraseña de longitud 12
Password pass = new Password(12);
//se muestra por pantalla
System.out.println("Contraseña creada: " + pass.getContraseña());
//Se muestra si es fuerte o no
System.out.println(pass.esFuerte() ? "Es fuerte" : "No es fuerte");
//Se introduce una nueva contraseña para modificar la anterior
//Se muestra el resultado de la modificación
if(pass.modificarContraseña()){
System.out.println("Nueva contraseña: " + pass.getContraseña());
}else{
System.out.println("La contraseña introducida no es fuerte");
System.out.println("la contraseña original no ha sido modificada: " + pass.getContraseña());
}
}
}
Ejemplos de ejecución del programa
Ejemplo 1. En este ejemplo introduce introduce como nueva contraseña una contraseña que no es fuerte. En este caso la contraseña actual no se modifica
Contraseña creada: B7_._.E_MkSV
No es fuerte
Modificar la contraseña
Introduzca nueva contraseña: hsB781
La contraseña introducida no es fuerte.
La contraseña original no ha sido modificada: B7_._.E_MkSV
Ejemplo 2. En este caso se introduce introduce como nueva contraseña una contraseña fuerte. Ahora la contraseña actual sí se modifica y se cambia por la contraseña introducida
Contraseña creada: .59inQP32S_.
Es fuerte
Modificar la contraseña
Introduzca nueva contraseña: 5A3Bzz.XY
Nueva contraseña: 5A3Bzz.XY
buen programa
ResponderEliminarMuy buen programa.
ResponderEliminar