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 desplazamiento, có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.
Deja una respuesta