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.

Etiquetas

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *