Cifrado Cesar en Java

Hola a todos, hoy os voy a explicar como podemos hacer un cifrado cesar en Java.

En criptografía, el cifrado César, también conocido como cifrado por desplazamientocódigo de César o desplazamiento de César, es una de las técnicas de cifrado más simples y más usadas.

Lo primero que necesitamos es almacenar el abecedario, en nuestro caso, lo vamos a almacenar en un String.


String letras = "ABCDEFGHIJKLMNÑOPQRSTUVWXYZ";

Para codificar un texto, lo que haremos es lo siguiente:

  • Recorrer el texto, carácter a carácter.
  • Si el carácter existe en el abecedario, avanzamos x posiciones (en nuestro caso 3 posiciones) en el abecedario. Para las ultimas posiciones (por ejemplo, Y => B), lo recomendado es usar el modulo.
  • Si no existe, lo dejamos como tal.

Veamos esto aplicado a código:


public static String codificar(String letras, String texto){
    String textoCodificado = "";

    texto = texto.toUpperCase();

    char caracter;
    for (int i = 0; i < texto.length(); i++) {
        caracter = texto.charAt(i);

        int pos = letras.indexOf(caracter);

        if(pos == -1){
            textoCodificado += caracter;
        }else{
            textoCodificado += letras.charAt( (pos + 3) % letras.length() );
        }

    }

    return textoCodificado;
}

Para descodificar seria mas o menos igual, cambiando un poco el tema de las posiciones.

  • Recorrer el texto, carácter a carácter.
  • Si el carácter existe en el abecedario, avanzamos x posiciones (en nuestro caso 3 posiciones) en el abecedario. Para las ultimas posiciones (por ejemplo, B => Y) cuando el avance es menor que 0, deberemos restar la longitud total.
  • Si no existe, lo dejamos como tal.

Veamos esto aplicado a código:


public static String descodificar(String letras, String texto){
    String textoDescodificado = "";

    texto = texto.toUpperCase();

    char caracter;
    for (int i = 0; i < texto.length(); i++) {
        caracter = texto.charAt(i);

        int pos = letras.indexOf(caracter);

        if(pos == -1){
            textoDescodificado += caracter;
        }else{
            if(pos - 3 < 0){
                textoDescodificado += letras.charAt( letras.length() + (pos - 3) );
            }else{
                textoDescodificado += letras.charAt( (pos - 3) % letras.length() );
            }
        }

    }

    return textoDescodificado;
}

Os dejo el ejemplo completo:


import java.util.Scanner;

public class CifradoCesar {

    public static void main(String[] args) {
        
        Scanner sn = new Scanner(System.in);
        sn.useDelimiter("\n");
        
        String letras = "ABCDEFGHIJKLMNÑOPQRSTUVWXYZ";

        System.out.println("Dame una frase");
        String frase = sn.next();
        
        String texto = codificar(letras, frase);
        System.out.println("Texto codificado: " + texto);
        
        texto = descodificar(letras, texto);
        System.out.println("Texto descodificado: " + texto);
        
    }

    public static String codificar(String letras, String texto){
        String textoCodificado = "";

        texto = texto.toUpperCase();

        char caracter;
        for (int i = 0; i < texto.length(); i++) {
            caracter = texto.charAt(i);

            int pos = letras.indexOf(caracter);

            if(pos == -1){
                textoCodificado += caracter;
            }else{
                textoCodificado += letras.charAt( (pos + 3) % letras.length() );
            }

        }

        return textoCodificado;
    }

    public static String descodificar(String letras, String texto){
        String textoDescodificado = "";

        texto = texto.toUpperCase();

        char caracter;
        for (int i = 0; i < texto.length(); i++) {
            caracter = texto.charAt(i);

            int pos = letras.indexOf(caracter);

            if(pos == -1){
                textoDescodificado += caracter;
            }else{
                if(pos - 3 < 0){
                    textoDescodificado += letras.charAt( letras.length() + (pos - 3) );
                }else{
                    textoDescodificado += letras.charAt( (pos - 3) % letras.length() );
                }
            }

        }

        return textoDescodificado;
    }

}


Os dejo un video donde lo explico paso a paso:

Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte.

Compartir

Deja una respuesta

Tu dirección de correo electrónico no será publicada.