Cómo codificar el cifrado Caesar: una introducción al cifrado básico

Caesar Cipher es una famosa implementación del cifrado de los primeros días. Tomaría una oración y la reorganizaría basándose en una clave que se promulga en el alfabeto. Tomemos, por ejemplo, una clave de 3 y la oración "Me gusta usar sombreros".

Cuando esta oración se cifra con una clave de 3, se convierte en:

L olnh wr zhdu kdwv.

Esto dificulta la lectura y permite que los mensajes se pasen sin ser detectados.

Si bien este es un ejemplo muy simple de cifrado, es un proyecto perfecto para que alguien que está aprendiendo a codificar lo practique.

Entendiendo el cifrado

Para implementar este código, al menos en JAVA, necesitaría pensar en lo que realmente se está haciendo. Entonces, veamos los pasos necesarios a seguir para codificar esto.

Paso 1: Identifica el personaje dentro de la oración.

Paso 2: Encuentra la ubicación de ese personaje dentro del alfabeto.

Paso 3: Identifique la ubicación de los caracteres + la clave en el alfabeto.

Nota * si la ubicación + tecla> 26, retrocede y comienza a contar desde uno.

Paso 4: Construye una nueva oración usando los nuevos personajes en lugar de los originales.

Paso 5: repita hasta alcanzar la longitud de la oración. (En bucle).

Paso 6: devuelve el resultado.

Codificar el cifrado

Si bien esos son pasos bastante buenos para seguir, deberíamos pensar en lo que tendríamos que hacer en el código.

Paso 0: Establecer una función que lea un mensaje y una tecla.

Algo como esto:

public String Encrypt(String message, int key) {
}

Paso 1: Identifica el personaje dentro de la oración.

Para hacer esto, necesitaremos establecer un alfabeto para mirar.

Establezca un "alfabeto" variable que consta de las 26 letras del alfabeto.

String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";String alphabet2 = alphabet.toLowerCase();

Paso 2: Encuentra la ubicación de ese personaje dentro del alfabeto.

Luego cree un bucle for que se ejecute a través de cada carácter dentro del mensaje. Será más fácil hacer esto si establecemos un StringBuilder.

StringBuilder encrypted = new StringBuilder(message);
for (int q = 0; q < encrypted.length(); q++) { char currchar = encrypted.charAt(q); int index = alphabet.indexOf(currchar);}

En este punto, debemos asegurarnos de que el lugar sea una letra.

if (index != -1) {
} 

Paso 3: Identifica la ubicación de ese personaje + la clave en el alfabeto.

Si es una letra, entonces tenemos que encontrar el lugar en el alfabeto modificado. Aún no hemos establecido una variable alfabética modificada, así que deberíamos hacerlo ahora.

Paso 4: Construye una nueva oración usando los nuevos personajes en lugar de los originales.

Una vez que hayamos encontrado el valor en el alfabeto modificado, deberíamos establecerlo en la misma ubicación en el StringBuilder que creamos.

public String Encryption(String input, int key){ StringBuilder encrypted = new StringBuilder(input); String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; String alphabet2 = alphabet.toLowerCase(); String keyedalphabet = alphabet.substring(key) + alphabet.substring(0, key);for (int q = 0; q < encrypted.length(); q++) { char currChar = encrypted.charAt(q); int index = alphabet.indexOf(currChar); if (index != -1) { char newChar = keyedalphabet.charAt(index); encrypted.setCharAt(q, newChar); }

Paso 5: repita hasta alcanzar la longitud de la oración. (En bucle)

Ahora, hemos verificado si el carácter está en mayúsculas, pero también necesitamos verificar si el carácter está en minúsculas. Para hacer esto, necesitamos acceder a alphabet2 que establecimos anteriormente.

index = alphabet2.indexOf(currChar); if (index != -1) { String keyedalphabet2 = keyedalphabet.toLowerCase(); char newChar = keyedalphabet2.charAt(index); encrypted.setCharAt(q, newChar); }

Paso 6: devuelve el resultado.

Ahora, hemos completado el ciclo For. Todo lo que nos queda es salir y devolver el String.

public String Encryption(String input, int key){ StringBuilder encrypted = new StringBuilder(input); String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; String alphabet2 = alphabet.toLowerCase(); String keyedalphabet = alphabet.substring(key) + alphabet.substring(0, key); for (int q = 0; q < encrypted.length(); q++) { char currChar = encrypted.charAt(q); int index = alphabet.indexOf(currChar); if (index != -1) { char newChar = keyedalphabet.charAt(index); encrypted.setCharAt(q, newChar); } index = alphabet2.indexOf(currChar); if (index != -1) { String keyedalphabet2 = keyedalphabet.toLowerCase(); char newChar = keyedalphabet2.charAt(index); encrypted.setCharAt(q, newChar); } } return encrypted }

Paso 7: depurar.

¡Pero espera! ¡Eso no funcionará! cifrado no es un String, es un StringBuilder y esta función requiere específicamente que se devuelva un String.

Afortunadamente, existe una función muy sencilla para remediar este descuido.

public String Encryption(String input, int key){ StringBuilder encrypted = new StringBuilder(input); String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; String alphabet2 = alphabet.toLowerCase(); String keyedalphabet = alphabet.substring(key) + alphabet.substring(0, key); for (int q = 0; q < encrypted.length(); q++) { char currChar = encrypted.charAt(q); int index = alphabet.indexOf(currChar); if (index != -1) { char newChar = keyedalphabet.charAt(index); encrypted.setCharAt(q, newChar); } index = alphabet2.indexOf(currChar); if (index != -1) { String keyedalphabet2 = keyedalphabet.toLowerCase(); char newChar = keyedalphabet2.charAt(index); encrypted.setCharAt(q, newChar); } } return encrypted.toString(); }

Así es como obtienes la versión encriptada de tu oración original. ¡Pruébelo usted mismo!

¡Gracias por leer!