Aprende Java Fácil. Capítulo 11. Volviendo a hackear el sistema de seguridad

Capítulo 11. Volviendo a hackear el sistema de seguridad

Capítulo 11. Volviendo a hackear el sistema de seguridad

El día ha llegado, la fuga ha comenzado oficialmente y, a partir de hoy, no hay marcha atrás. Pedro debe estar ya en la biblioteca, así que, si todo ocurre como esperamos, en breves momentos sonará la alarma. Bud ya está preparado con su ordenador; sin él no podría llegar hasta el despacho del director. No decimos nada; Bud mira la pantalla fijamente, muy concentrado.

No todos los días le dejan tener el portátil en la celda, pero hoy se aseguró de que así fuera. Se las ingenió para que el sistema de ventilación de la cocina dejase de funcionar y, en teoría, está tratando de repararlo.

Colarse en el despacho del director tiene un único objetivo: acceder a la libreta del director, donde          apunta todo manualmente. Es un señor de edad avanzada, al que no le gusta mucho la informática. Se llama Vicente. La información que tratamos de conseguir es muy valiosa, ya que nos servirá para las siguientes fases del plan.

Por fin, el momento llegó: la alarma se disparó. Era mucho más ruidosa de lo que había imaginado. Vi que Bud empezaba a teclear a toda velocidad. El asalto al despacho de Vicente había comenzado.

Para hacer más amena la espera, vamos a meternos en la piel de Bud y a programar todo el código necesario para llevar a cabo esta parte del plan. Si queremos llegar hasta el final, necesitamos completar cinco pasos y, además, tener algo de fortuna.

Programa 1. Desbloquear la puerta principal

Bud necesita desbloquear la puerta principal de su celda. Para ello, debe escribir un programa que verifique un código de seguridad antes de insertarlo. Si se ingresa el código incorrecto, la puerta podría bloquearse. El código correcto está guardado en un array y debe ser comparado con una entrada del usuario.

Instrucciones:

  • Crea un array que contenga el código de seguridad, por ejemplo: {1, 4, 5, 7, 9}.
  • Pide al usuario que ingrese un código de cinco dígitos.
  • Compara el código ingresado con el código almacenado en el array.
  • Si el código es correcto, muestra un mensaje de éxito. Si no, muestra un mensaje de error.

Solución:

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        int[] codigoSeguridad = {1, 4, 5, 7, 9};

        Scanner scanner = new Scanner(System.in);

        System.out.println("Ingrese el código de seguridad de 5 dígitos:");
        int[] codigoIngresado = new int[5];

        for (int i = 0; i < 5; i++) {
            codigoIngresado[i] = scanner.nextInt();
        }

        boolean esCorrecto = true;

        for (int i = 0; i < 5; i++) {
            if (codigoIngresado[i] != codigoSeguridad[i]) {
                esCorrecto = false;
                break;
            }
        }

        if (esCorrecto) {
            System.out.println("Código correcto. La puerta está desbloqueada.");
        } else {
            System.out.println("Código incorrecto. Inténtelo de nuevo.");
        }
    }
}

Programa 2. Evitar la cámara de seguridad

Bud necesita moverse por el primer pasillo sin ser detectado por una cámara de seguridad que se enciende y apaga a intervalos regulares. Debe escribir un programa que determine si puede moverse en un momento dado.

Instrucciones:

  • Usa un bucle for para simular los segundos de un minuto (0 a 59).
  • La cámara está encendida durante los primeros 10 segundos de cada minuto y apagada durante los siguientes 50 segundos.
  • Pide al usuario que ingrese un segundo en el que planea moverse.
  • Determina si la cámara estará encendida o apagada en ese segundo y muestra un mensaje correspondiente.

Solución:

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.println("Ingrese el segundo en el que planea moverse (0-59):");
        int segundo = scanner.nextInt();

        if (segundo >= 0 && segundo < 10) {
            System.out.println("La cámara está encendida. Espere un momento más.");
        } else if (segundo >= 10 && segundo < 60) {
            System.out.println("La cámara está apagada. ¡Puede moverse!");
        } else {
            System.out.println("Entrada inválida. Intente de nuevo.");
        }
    }
}

Programa 3. Aumentar la temperatura del pasillo

El despacho se encuentra en una zona separada del pabellón principal. El vigilante permanecerá ahí, justo delante de la puerta a la que necesitamos acceder. Bud tendrá que evitarlo aumentando la temperatura del pasillo para que el vigilante se vea obligado a ir a la sala central.

Instrucciones:

  • Ingresa la temperatura inicial del pasillo.
  • Ingresa la cantidad de grados que deseas aumentar.
  • Suma el aumento deseado a la temperatura inicial.
  • Muestra la nueva temperatura del pasillo después del ajuste.

Solución:

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("Ingresa la temperatura inicial del pasillo (en grados Celsius): ");
        double temperaturaInicial = scanner.nextDouble();

        System.out.print("Ingresa la cantidad de grados para aumentar: ");
        double aumento = scanner.nextDouble();

        double nuevaTemperatura = temperaturaInicial + aumento;

        System.out.println("La nueva temperatura del pasillo es: " + nuevaTemperatura + "°C");

        scanner.close();
    }
}

Programa 4. Código de seguridad basado en la hora actual

Bud necesita generar un código de seguridad basado en la hora actual (minutos y segundos). Este código cambia cada minuto y debe ser ingresado correctamente para desbloquear una puerta.

Instrucciones:

  1. Usa la clase LocalTime para obtener la hora actual.
  2. Genera un código de seguridad sumando los minutos y los segundos actuales.
  3. Muestra el código generado al usuario.
  4. Pide al usuario que ingrese el código mostrado.
  5. Verifica si el código ingresado es correcto y muestra un mensaje adecuado.

Solución:

import java.time.LocalTime;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {

        LocalTime ahora = LocalTime.now();
        int minutos = ahora.getMinute();
        int segundos = ahora.getSecond();

        int codigoGenerado = minutos + segundos;

        System.out.println("El código de seguridad generado es: " + codigoGenerado);

        Scanner scanner = new Scanner(System.in);
        System.out.println("Ingrese el código de seguridad para validar:");
        int codigoIngresado = scanner.nextInt();

        if (codigoIngresado == codigoGenerado) {
            System.out.println("Código correcto. La puerta está abierta.");
        } else {
            System.out.println("Código incorrecto. Inténtelo de nuevo.");
        }

        scanner.close();
    }
}

Programa 5. Menú para preparar café o limpiar la cafetera

Bud debe activar la función de autolimpieza de la cafetera para distraer al vigilante. El programa debe permitir preparar café, activar la limpieza o salir.

Instrucciones:

  • Implementa un menú simple para seleccionar preparar café, limpiar la cafetera o salir.
  • Muestra mensajes para indicar el inicio y fin de la limpieza.
  • Permite repetir el proceso hasta que el usuario decida salir.

Solución:

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        boolean continuar = true;

        while (continuar) {

            System.out.println("\n--- Menú de la Cafetera ---");
            System.out.println("1. Preparar café");
            System.out.println("2. Activar función de limpieza manual");
            System.out.println("3. Salir");

            System.out.print("Elige una opción: ");

            int opcion = scanner.nextInt();

            switch (opcion) {
                case 1:
                    System.out.println("Preparando café... ¡Disfruta tu bebida!");
                    break;

                case 2:
                    System.out.println("Iniciando la función de limpieza manual...");
                    System.out.println("La cafetera se está limpiando...");
                    System.out.println("¡La limpieza ha finalizado! La cafetera está lista para usarse.");
                    break;

                case 3:
                    System.out.println("Saliendo del programa. ¡Hasta luego!");
                    continuar = false;
                    break;

                default:
                    System.out.println("Opción no válida. Por favor, elige una opción del menú.");
                    break;
            }
        }

        scanner.close();
    }
}

¿Te gustó? Pues no te lo guardes, ¡compártelo como si fuera un chisme! 😏