Caso Práctico en NetBeans

 Este ejemplo muestra cómo implementar un sistema de cifrado asimétrico usando Java en NetBeans:



Cifrado asimétrico 

Codigo:
package cifradoasimetrico;

import java.security.*;
import javax.crypto.Cipher;
import java.util.Base64;
import javax.swing.JOptionPane;

public class CifradoAsimetrico {

    public static void main(
            String[] args) {
        // Solicitar usuario y contraseña
        String usuario = JOptionPane.showInputDialog(null, "Ingrese el usuario:");
        String contraseña = JOptionPane.showInputDialog(null, "Ingrese la contraseña:");

        // Validar usuario y contraseña
        if (usuario.equals("ADMIN") && contraseña.equals("12234")) {
            JOptionPane.showMessageDialog(null, "¡Acceso concedido!");

            try {
                // 1. Generar claves
                KeyPairGenerator generadorClaves = KeyPairGenerator.getInstance("RSA");
                generadorClaves.initialize(2048);
                KeyPair parClaves = generadorClaves.generateKeyPair();
                PublicKey clavePublica = parClaves.getPublic();
                PrivateKey clavePrivada = parClaves.getPrivate();

                // 2. Cifrar la contraseña (12234)
                String claveOriginal = "12234";

                Cipher cifrador = Cipher.getInstance("RSA");
                cifrador.init(Cipher.ENCRYPT_MODE, clavePublica);
                byte[] claveCifradaBytes = cifrador.doFinal(claveOriginal.getBytes());
                String claveCifrada = Base64.getEncoder().encodeToString(claveCifradaBytes);

                // 3. Mostrar mensaje con clave original y encriptada
                JOptionPane.showMessageDialog(null, 
                    "Su clave es: " + claveOriginal + 
                    "\nSu clave encriptada es:\n" + claveCifrada);

                // 4. Mostrar descifrado (opcional)
                cifrador.init(Cipher.DECRYPT_MODE, clavePrivada);
                byte[] claveDescifradaBytes = cifrador.doFinal(Base64.getDecoder().decode(claveCifrada));
                String claveDescifrada = new String(claveDescifradaBytes);

                JOptionPane.showMessageDialog(null, 
                    "Verificación: clave descifrada:\n" + claveDescifrada);

            } catch (Exception e) {
                JOptionPane.showMessageDialog(null, "Ocurrió un error: " + e.getMessage());
            }

        } else {
            JOptionPane.showMessageDialog(null, "Acceso denegado. Usuario o contraseña incorrectos.");
        }
    }
}


Cifrado simétrico 

Código:

package cifradosimetrico;


import javax.crypto.Cipher;

import javax.crypto.KeyGenerator;

import javax.crypto.SecretKey;

import javax.crypto.spec.SecretKeySpec;

import javax.swing.JOptionPane;

import java.util.Base64;


public class CifradoSimetrico {


    public static void main(String[] args) {

        // Paso 1: Solicitar usuario y contraseña

        String usuario = JOptionPane.showInputDialog(null, "Ingrese el usuario:");

        String contraseña = JOptionPane.showInputDialog(null, "Ingrese la contraseña:");


        // Paso 2: Validar credenciales

        if (usuario.equals("ADMIN") && contraseña.equals("1234")) {

            JOptionPane.showMessageDialog(null, "¡Acceso concedido!");


            try {

                // Paso 3: Crear clave simétrica AES (128 bits)

                KeyGenerator generador = KeyGenerator.getInstance("AES");

                generador.init(128); // Puedes usar 192 o 256 si Java lo permite

                SecretKey claveSimetrica = generador.generateKey();


                // Mostrar la clave en Base64

                String claveBase64 = Base64.getEncoder().encodeToString(claveSimetrica.getEncoded());

                JOptionPane.showMessageDialog(null, "Clave simétrica generada (AES - Base64):\n" + claveBase64);


                // Paso 4: Cifrar la contraseña con la clave

                Cipher cifrador = Cipher.getInstance("AES");

                cifrador.init(Cipher.ENCRYPT_MODE, claveSimetrica);

                byte[] cifradoBytes = cifrador.doFinal(contraseña.getBytes());

                String contraseñaCifrada = Base64.getEncoder().encodeToString(cifradoBytes);


                // Mostrar la contraseña cifrada

                JOptionPane.showMessageDialog(null,

                        "Su clave es: " + contraseña +

                        "\nSu clave encriptada (AES) es:\n" + contraseñaCifrada);


                // Paso 5: Descifrar

                cifrador.init(Cipher.DECRYPT_MODE, claveSimetrica);

                byte[] descifradoBytes = cifrador.doFinal(Base64.getDecoder().decode(contraseñaCifrada));

                String contraseñaDescifrada = new String(descifradoBytes);


                // Mostrar verificación

                JOptionPane.showMessageDialog(null,

                        "Verificación: la clave descifrada es:\n" + contraseñaDescifrada);


            } catch (Exception e) {

                JOptionPane.showMessageDialog(null, "Error durante el proceso: " + e.getMessage());

            }


        } else {

            JOptionPane.showMessageDialog(null, "Acceso denegado. Usuario o contraseña incorrectos.");

        }

    }

}





Comentarios

Entradas más populares de este blog

Cifrado Asimétrico - Seguridad en la Era Digital

Recomendaciones y Observaciones Finales

Comparativa con el Cifrado Simétrico